socket_poll_prepare : 'poll -> read:'socket array -> write:'socket array -> int array array Prepare a poll for scanning events on sets of sockets. **/
| 1169 | </doc> |
| 1170 | **/ |
| 1171 | Array<Dynamic> _hx_std_socket_poll_prepare( Dynamic pdata, Array<Dynamic> rsocks, Array<Dynamic> wsocks ) |
| 1172 | { |
| 1173 | polldata *p = val_poll(pdata); |
| 1174 | |
| 1175 | int len = rsocks.mPtr ? rsocks->length : 0; |
| 1176 | int wlen = wsocks.mPtr ? wsocks->length : 0; |
| 1177 | if( len + wlen > p->max ) |
| 1178 | hx::Throw(HX_CSTRING("Too many sockets in poll")); |
| 1179 | |
| 1180 | #ifdef NEKO_WINDOWS |
| 1181 | for(int i=0;i<len;i++) |
| 1182 | p->fdr->fd_array[i] = val_sock( rsocks[i] ); |
| 1183 | p->fdr->fd_count = len; |
| 1184 | |
| 1185 | len = wlen; |
| 1186 | for(int i=0;i<len;i++) |
| 1187 | p->fdw->fd_array[i] = val_sock( wsocks[i]); |
| 1188 | p->fdw->fd_count = len; |
| 1189 | |
| 1190 | #else |
| 1191 | |
| 1192 | for(int i=0;i<len;i++) |
| 1193 | { |
| 1194 | p->fds[i].fd = val_sock( rsocks[i] ); |
| 1195 | p->fds[i].events = POLLIN; |
| 1196 | p->fds[i].revents = 0; |
| 1197 | } |
| 1198 | p->rcount = len; |
| 1199 | len = wlen; |
| 1200 | for(int i=0;i<len;i++) |
| 1201 | { |
| 1202 | int k = i + p->rcount; |
| 1203 | p->fds[k].fd = val_sock(wsocks[i]); |
| 1204 | p->fds[k].events = POLLOUT; |
| 1205 | p->fds[k].revents = 0; |
| 1206 | } |
| 1207 | p->wcount = len; |
| 1208 | |
| 1209 | #endif |
| 1210 | |
| 1211 | Array<Dynamic> a = Array_obj<Dynamic>::__new(2,2); |
| 1212 | a[0] = p->ridx; |
| 1213 | a[1] = p->widx; |
| 1214 | return a; |
| 1215 | } |
| 1216 | |
| 1217 | |
| 1218 | /** |
no test coverage detected