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:
------------

View File

@ -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

View File

@ -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.

View File

@ -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 ;

View File

@ -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

View File

@ -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 ;

View File

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