]> gitweb.factorcode.org Git - factor.git/commitdiff
io.sockets: adding "broadcast port", ideally would just be +broadcast+ or something...
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 29 May 2012 17:46:19 +0000 (10:46 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 29 May 2012 17:46:19 +0000 (10:46 -0700)
basis/io/sockets/sockets.factor
basis/io/sockets/unix/unix.factor
basis/io/sockets/windows/windows.factor

index 093989e390239a4ec24c9be7d8f358b0602646f6..933806843826c07135d1df9b50356a61ae6e0b1b 100644 (file)
@@ -281,6 +281,8 @@ TUPLE: raw-port < port addr ;
 
 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 ;
@@ -363,6 +365,9 @@ SYMBOL: remote-address
         >>addr
     ] with-destructors ;
 
+: <broadcast> ( datagram -- datagram )
+    <datagram> (broadcast) ;
+
 : receive-unsafe ( n buf datagram -- count addrspec )
     check-receive
     [ (receive-unsafe) ] [ addr>> ] bi parse-sockaddr ; inline
index 4fcb90b9c73f3589274d3581c822887ea4fca752..57207ff67a0b321eb436f1455429871dc43f0c4c 100644 (file)
@@ -125,6 +125,9 @@ M: unix (datagram)
 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
index 39d4310bb24af961a013efd17620e2db10ff43d1..579dc85abb1210f5fcb7633307a2d962c4b805c4 100755 (executable)
@@ -8,6 +8,9 @@ windows.winsock locals ;
 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
@@ -86,6 +89,9 @@ M: windows (datagram) ( addrspec -- handle )
 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