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:
|
Factor 0.74:
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 ;
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
IN: kernel
|
IN: kernel
|
||||||
: version "0.74" ;
|
: version "0.75" ;
|
||||||
|
|
Loading…
Reference in New Issue