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 -- )
|
||||
[ 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 -- )
|
||||
winsock-return-check ;
|
||||
|
||||
|
|
|
@ -88,6 +88,10 @@ CONSTANT: IPPROTO_TCP 6
|
|||
CONSTANT: IPPROTO_UDP 17
|
||||
CONSTANT: IPPROTO_RM 113
|
||||
|
||||
CONSTANT: FIOASYNC 0x8004667d
|
||||
CONSTANT: FIONBIO 0x8004667e
|
||||
CONSTANT: FIONREAD 0x4004667f
|
||||
|
||||
CONSTANT: WSA_FLAG_OVERLAPPED 1
|
||||
ALIAS: WSA_WAIT_EVENT_0 WAIT_OBJECT_0
|
||||
ALIAS: WSA_MAXIMUM_WAIT_EVENTS MAXIMUM_WAIT_OBJECTS
|
||||
|
@ -166,6 +170,7 @@ STRUCT: fd_set
|
|||
LIBRARY: winsock
|
||||
|
||||
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 ntohs ( ushort n ) ;
|
||||
|
|
Loading…
Reference in New Issue