set OOBINLINE socket option now

cvs
Slava Pestov 2005-05-04 07:07:35 +00:00
parent 8c162ebca7
commit 838ae87589
7 changed files with 39 additions and 24 deletions

View File

@ -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: Factor 0.74:
------------ ------------

View File

@ -90,6 +90,7 @@
+ i/o: + i/o:
- if two tasks write to a unix stream, the buffer can overflow
- faster stream-copy - faster stream-copy
- rename prettyprint to pprint - rename prettyprint to pprint
- reading and writing byte arrays - reading and writing byte arrays

View File

@ -38,13 +38,12 @@ USING: alien generic kernel math unix-internals ;
: server-sockaddr ( port -- sockaddr ) : server-sockaddr ( port -- sockaddr )
init-sockaddr INADDR_ANY htonl over set-sockaddr-in-addr ; init-sockaddr INADDR_ANY htonl over set-sockaddr-in-addr ;
: reuse-addr ( fd -- ) : sockopt ( fd opt -- )
SOL_SOCKET SO_REUSEADDR 1 box-int "int" c-size setsockopt SOL_SOCKET swap 1 box-int "int" c-size setsockopt io-error ;
io-error ;
: server-socket ( port -- fd ) : server-socket ( port -- fd )
server-sockaddr [ server-sockaddr [
dup reuse-addr dup SO_REUSEADDR sockopt
swap dupd "sockaddr-in" c-size bind swap dupd "sockaddr-in" c-size bind
dup 0 >= [ drop 1 listen ] [ ( fd n - n) nip ] ifte dup 0 >= [ drop 1 listen ] [ ( fd n - n) nip ] ifte
] with-socket-fd ; ] with-socket-fd ;
@ -81,7 +80,11 @@ IN: streams
C: client-stream ( fd host port -- stream ) C: client-stream ( fd host port -- stream )
[ set-client-stream-port ] keep [ set-client-stream-port ] keep
[ set-client-stream-host ] 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 ) : <client> ( host port -- stream )
#! Connect to a port number on a TCP/IP host. #! Connect to a port number on a TCP/IP host.

View File

@ -10,17 +10,19 @@ IN: unix-internals
: O_CREAT HEX: 0200 ; : O_CREAT HEX: 0200 ;
: O_TRUNC HEX: 0400 ; : O_TRUNC HEX: 0400 ;
: POLLIN HEX: 0001 ; ! any readable data available : POLLIN HEX: 0001 ;
: POLLPRI HEX: 0002 ; ! OOB/Urgent readable data : POLLPRI HEX: 0002 ;
: POLLOUT HEX: 0004 ; ! file descriptor is writeable : POLLOUT HEX: 0004 ;
: POLLRDNORM HEX: 0040 ; ! non-OOB/URG data available : POLLRDNORM HEX: 0040 ;
: POLLWRNORM POLLOUT ; ! no write type differentiation : POLLWRNORM POLLOUT ;
: POLLRDBAND HEX: 0080 ; ! OOB/Urgent readable data : POLLRDBAND HEX: 0080 ;
: POLLWRBAND HEX: 0100 ; ! OOB/Urgent data can be written : POLLWRBAND HEX: 0100 ;
: 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 ; : INADDR_ANY 0 ;
: F_SETFL 4 ; ! set file status flags : F_SETFL 4 ;
: O_NONBLOCK 4 ; ! no delay : O_NONBLOCK 4 ;

View File

@ -20,6 +20,7 @@ IN: unix-internals
: SOL_SOCKET 1 ; : SOL_SOCKET 1 ;
: SO_REUSEADDR 2 ; : SO_REUSEADDR 2 ;
: SO_OOBINLINE 10 ;
: INADDR_ANY 0 ; : INADDR_ANY 0 ;
: F_SETFL 4 ; ! set file status flags : F_SETFL 4 ; ! set file status flags

View File

@ -10,13 +10,15 @@ IN: unix-internals
: O_CREAT HEX: 0200 ; : O_CREAT HEX: 0200 ;
: O_TRUNC HEX: 0400 ; : O_TRUNC HEX: 0400 ;
: POLLIN HEX: 0001 ; ! any readable data available : POLLIN HEX: 0001 ;
: POLLPRI HEX: 0002 ; ! OOB/Urgent readable data : POLLPRI HEX: 0002 ;
: POLLOUT HEX: 0004 ; ! file descriptor is writeable : 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 ; : INADDR_ANY 0 ;
: F_SETFL 4 ; ! set file status flags : F_SETFL 4 ;
: O_NONBLOCK 4 ; ! no delay : O_NONBLOCK 4 ;

View File

@ -1,2 +1,2 @@
IN: kernel IN: kernel
: version "0.74" ; : version "0.75" ;