set OOBINLINE socket option now
parent
8c162ebca7
commit
838ae87589
|
@ -1,3 +1,9 @@
|
|||
Factor 0.75:
|
||||
------------
|
||||
|
||||
The SO_OOBINLINE socket flag is now set. In 0.74, sending out-of-band
|
||||
data could fill up the buffer and cause a denial-of-service attack.
|
||||
|
||||
Factor 0.74:
|
||||
------------
|
||||
|
||||
|
|
|
@ -90,6 +90,7 @@
|
|||
|
||||
+ i/o:
|
||||
|
||||
- if two tasks write to a unix stream, the buffer can overflow
|
||||
- faster stream-copy
|
||||
- rename prettyprint to pprint
|
||||
- reading and writing byte arrays
|
||||
|
|
|
@ -38,13 +38,12 @@ USING: alien generic kernel math unix-internals ;
|
|||
: server-sockaddr ( port -- sockaddr )
|
||||
init-sockaddr INADDR_ANY htonl over set-sockaddr-in-addr ;
|
||||
|
||||
: reuse-addr ( fd -- )
|
||||
SOL_SOCKET SO_REUSEADDR 1 box-int "int" c-size setsockopt
|
||||
io-error ;
|
||||
: sockopt ( fd opt -- )
|
||||
SOL_SOCKET swap 1 box-int "int" c-size setsockopt io-error ;
|
||||
|
||||
: server-socket ( port -- fd )
|
||||
server-sockaddr [
|
||||
dup reuse-addr
|
||||
dup SO_REUSEADDR sockopt
|
||||
swap dupd "sockaddr-in" c-size bind
|
||||
dup 0 >= [ drop 1 listen ] [ ( fd n - n) nip ] ifte
|
||||
] with-socket-fd ;
|
||||
|
@ -81,7 +80,11 @@ IN: streams
|
|||
C: client-stream ( fd host port -- stream )
|
||||
[ set-client-stream-port ] keep
|
||||
[ set-client-stream-host ] keep
|
||||
[ >r dup f <fd-stream> r> set-delegate ] keep ;
|
||||
[
|
||||
>r
|
||||
dup SO_OOBINLINE sockopt
|
||||
dup f <fd-stream> r> set-delegate
|
||||
] keep ;
|
||||
|
||||
: <client> ( host port -- stream )
|
||||
#! Connect to a port number on a TCP/IP host.
|
||||
|
|
|
@ -9,18 +9,20 @@ IN: unix-internals
|
|||
: O_RDWR HEX: 0002 ;
|
||||
: O_CREAT HEX: 0200 ;
|
||||
: O_TRUNC HEX: 0400 ;
|
||||
|
||||
: POLLIN HEX: 0001 ;
|
||||
: POLLPRI HEX: 0002 ;
|
||||
: POLLOUT HEX: 0004 ;
|
||||
: POLLRDNORM HEX: 0040 ;
|
||||
: POLLWRNORM POLLOUT ;
|
||||
: POLLRDBAND HEX: 0080 ;
|
||||
: POLLWRBAND HEX: 0100 ;
|
||||
|
||||
: POLLIN HEX: 0001 ; ! any readable data available
|
||||
: POLLPRI HEX: 0002 ; ! OOB/Urgent readable data
|
||||
: POLLOUT HEX: 0004 ; ! file descriptor is writeable
|
||||
: POLLRDNORM HEX: 0040 ; ! non-OOB/URG data available
|
||||
: POLLWRNORM POLLOUT ; ! no write type differentiation
|
||||
: POLLRDBAND HEX: 0080 ; ! OOB/Urgent readable data
|
||||
: POLLWRBAND HEX: 0100 ; ! OOB/Urgent data can be written
|
||||
: SOL_SOCKET HEX: ffff ;
|
||||
: SO_REUSEADDR HEX: 4 ;
|
||||
: SO_OOBINLINE HEX: ff ;
|
||||
|
||||
: SOL_SOCKET HEX: ffff ; ! options for socket level
|
||||
: SO_REUSEADDR HEX: 4 ; ! allow local address reuse
|
||||
: INADDR_ANY 0 ;
|
||||
|
||||
: F_SETFL 4 ; ! set file status flags
|
||||
: O_NONBLOCK 4 ; ! no delay
|
||||
: F_SETFL 4 ;
|
||||
: O_NONBLOCK 4 ;
|
||||
|
|
|
@ -20,6 +20,7 @@ IN: unix-internals
|
|||
|
||||
: SOL_SOCKET 1 ;
|
||||
: SO_REUSEADDR 2 ;
|
||||
: SO_OOBINLINE 10 ;
|
||||
: INADDR_ANY 0 ;
|
||||
|
||||
: F_SETFL 4 ; ! set file status flags
|
||||
|
|
|
@ -10,13 +10,15 @@ IN: unix-internals
|
|||
: O_CREAT HEX: 0200 ;
|
||||
: O_TRUNC HEX: 0400 ;
|
||||
|
||||
: POLLIN HEX: 0001 ; ! any readable data available
|
||||
: POLLPRI HEX: 0002 ; ! OOB/Urgent readable data
|
||||
: POLLOUT HEX: 0004 ; ! file descriptor is writeable
|
||||
: POLLIN HEX: 0001 ;
|
||||
: POLLPRI HEX: 0002 ;
|
||||
: POLLOUT HEX: 0004 ;
|
||||
|
||||
: SOL_SOCKET HEX: ffff ;
|
||||
: SO_REUSEADDR HEX: 4 ;
|
||||
: SO_OOBINLINE HEX: ff ;
|
||||
|
||||
: SOL_SOCKET HEX: ffff ; ! options for socket level
|
||||
: SO_REUSEADDR HEX: 4 ; ! allow local address reuse
|
||||
: INADDR_ANY 0 ;
|
||||
|
||||
: F_SETFL 4 ; ! set file status flags
|
||||
: O_NONBLOCK 4 ; ! no delay
|
||||
: F_SETFL 4 ;
|
||||
: O_NONBLOCK 4 ;
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
IN: kernel
|
||||
: version "0.74" ;
|
||||
: version "0.75" ;
|
||||
|
|
Loading…
Reference in New Issue