io.sockets.windows: wrap ioctlsocket and related constants to enable
setting sockets in non-blocking modedb4
parent
4676ff921a
commit
ee19a97869
|
@ -0,0 +1,20 @@
|
||||||
|
USING: accessors continuations io.sockets io.sockets.windows kernel sequences tools.test
|
||||||
|
urls windows.winsock ;
|
||||||
|
IN: io.sockets.windows.tests
|
||||||
|
|
||||||
|
: google-socket ( -- socket )
|
||||||
|
URL" http://www.google.com" url-addr resolve-host first
|
||||||
|
SOCK_STREAM open-socket ;
|
||||||
|
|
||||||
|
{ } [
|
||||||
|
google-socket
|
||||||
|
{ FIONBIO FIONREAD } [
|
||||||
|
google-socket swap execute( -- x )
|
||||||
|
[ 1 set-ioctl-socket ] [ 0 set-ioctl-socket ] 2bi
|
||||||
|
] each drop
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{ t } [
|
||||||
|
[ google-socket 1337 -8 set-ioctl-socket ]
|
||||||
|
[ [ winsock-exception? ] [ n>> 10045 = ] bi and ] recover
|
||||||
|
] unit-test
|
|
@ -11,6 +11,9 @@ IN: io.sockets.windows
|
||||||
: set-socket-option ( handle level opt -- )
|
: set-socket-option ( handle level opt -- )
|
||||||
[ handle>> ] 2dip 1 int <ref> dup byte-length setsockopt socket-error ;
|
[ handle>> ] 2dip 1 int <ref> dup byte-length setsockopt socket-error ;
|
||||||
|
|
||||||
|
: set-ioctl-socket ( handle cmd arg -- )
|
||||||
|
[ handle>> ] 2dip ulong <ref> ioctlsocket socket-error ;
|
||||||
|
|
||||||
M: windows addrinfo-error ( n -- )
|
M: windows addrinfo-error ( n -- )
|
||||||
winsock-return-check ;
|
winsock-return-check ;
|
||||||
|
|
||||||
|
|
|
@ -88,6 +88,10 @@ CONSTANT: IPPROTO_TCP 6
|
||||||
CONSTANT: IPPROTO_UDP 17
|
CONSTANT: IPPROTO_UDP 17
|
||||||
CONSTANT: IPPROTO_RM 113
|
CONSTANT: IPPROTO_RM 113
|
||||||
|
|
||||||
|
CONSTANT: FIOASYNC 0x8004667d
|
||||||
|
CONSTANT: FIONBIO 0x8004667e
|
||||||
|
CONSTANT: FIONREAD 0x4004667f
|
||||||
|
|
||||||
CONSTANT: WSA_FLAG_OVERLAPPED 1
|
CONSTANT: WSA_FLAG_OVERLAPPED 1
|
||||||
ALIAS: WSA_WAIT_EVENT_0 WAIT_OBJECT_0
|
ALIAS: WSA_WAIT_EVENT_0 WAIT_OBJECT_0
|
||||||
ALIAS: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS
|
ALIAS: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS
|
||||||
|
@ -166,6 +170,7 @@ STRUCT: fd_set
|
||||||
LIBRARY: winsock
|
LIBRARY: winsock
|
||||||
|
|
||||||
FUNCTION: int setsockopt ( SOCKET s, int level, int optname, c-string optval, int optlen ) ;
|
FUNCTION: int setsockopt ( SOCKET s, int level, int optname, c-string optval, int optlen ) ;
|
||||||
|
FUNCTION: int ioctlsocket ( SOCKET s, long cmd, ulong* *argp ) ;
|
||||||
|
|
||||||
FUNCTION: ushort htons ( ushort n ) ;
|
FUNCTION: ushort htons ( ushort n ) ;
|
||||||
FUNCTION: ushort ntohs ( ushort n ) ;
|
FUNCTION: ushort ntohs ( ushort n ) ;
|
||||||
|
|
Loading…
Reference in New Issue