socket_select : read : 'socket array -> write : 'socket array -> others : 'socket array -> timeout:number? -> 'socket array array Perform the [select] operation. Timeout is in seconds or [null] if infinite **/
| 717 | <doc>Perform the [select] operation. Timeout is in seconds or [null] if infinite</doc> |
| 718 | **/ |
| 719 | Array<Dynamic> _hx_std_socket_select( Array<Dynamic> rs, Array<Dynamic> ws, Array<Dynamic> es, Dynamic timeout ) |
| 720 | { |
| 721 | SOCKET n = 0; |
| 722 | fd_set rx, wx, ex; |
| 723 | fd_set *ra, *wa, *ea; |
| 724 | |
| 725 | POSIX_LABEL(select_again); |
| 726 | ra = make_socket_array(rs,&rx,&n); |
| 727 | wa = make_socket_array(ws,&wx,&n); |
| 728 | ea = make_socket_array(es,&ex,&n); |
| 729 | if( ra == &INVALID || wa == &INVALID || ea == &INVALID ) |
| 730 | hx::Throw( HX_CSTRING("No valid sockets") ); |
| 731 | |
| 732 | struct timeval tval; |
| 733 | struct timeval *tt = 0; |
| 734 | if( timeout.mPtr ) |
| 735 | tt = init_timeval(timeout,&tval); |
| 736 | |
| 737 | hx::EnterGCFreeZone(); |
| 738 | if( select((int)(n+1),ra,wa,ea,tt) == SOCKET_ERROR ) |
| 739 | { |
| 740 | hx::ExitGCFreeZone(); |
| 741 | HANDLE_EINTR(select_again); |
| 742 | hx::Throw( HX_CSTRING("Select error ") + String((int)errno) ); |
| 743 | } |
| 744 | hx::ExitGCFreeZone(); |
| 745 | |
| 746 | Array<Dynamic> r = Array_obj<Dynamic>::__new(3,3); |
| 747 | r[0] = make_array_result(rs,ra); |
| 748 | r[1] = make_array_result(ws,wa); |
| 749 | r[2] = make_array_result(es,ea); |
| 750 | return r; |
| 751 | } |
| 752 | |
| 753 | /** |
| 754 | socket_select : read : 'socket array -> write : 'socket array -> others : 'socket array -> timeout:number? |
nothing calls this directly
no test coverage detected