HOOK: (raw) io-backend ( addr -- raw )
+HOOK: (broadcast) io-backend ( datagram -- datagram )
+
HOOK: (receive-unsafe) io-backend ( n buf datagram -- size addrspec )
ERROR: invalid-port object ;
>>addr
] with-destructors ;
+: <broadcast> ( datagram -- datagram )
+ <datagram> (broadcast) ;
+
: receive-unsafe ( n buf datagram -- count addrspec )
check-receive
[ (receive-unsafe) ] [ addr>> ] bi parse-sockaddr ; inline
M: unix (raw)
[ SOCK_RAW server-socket-fd ] with-destructors ;
+M: unix (broadcast)
+ dup handle>> SOL_SOCKET SO_BROADCAST set-socket-option ;
+
:: do-receive ( n buf port -- count sockaddr )
port addr>> empty-sockaddr/size :> ( sockaddr len )
port handle>> handle-fd ! s
FROM: namespaces => get ;\r
IN: io.sockets.windows\r
\r
+: set-socket-option ( handle level opt -- )\r
+ 1 int <ref> dup byte-length setsockopt socket-error ;\r
+\r
M: windows addrinfo-error ( n -- )\r
winsock-return-check ;\r
\r
M: windows (raw) ( addrspec -- handle )\r
[ SOCK_RAW server-socket ] with-destructors ;\r
\r
+M: windows (broadcast) ( datagram -- datagram )\r
+ dup handle>> SOL_SOCKET SO_BROADCAST set-socket-option ;\r
+\r
: malloc-int ( n -- alien )\r
int <ref> malloc-byte-array ; inline\r
\r