Refactor I/O a bit so that C types are resolved at compile time -- better for deployment

release
Slava Pestov 2007-11-04 17:32:18 -05:00
parent dfeb154bb1
commit de582084a4
4 changed files with 13 additions and 15 deletions

View File

@ -45,9 +45,9 @@ M: connect-task task-container drop write-tasks get-global ;
[ swap <connect-task> add-io-task stop ] callcc0 drop ;
M: unix-io (client) ( addrspec -- stream )
dup make-sockaddr >r >r
dup make-sockaddr/size >r >r
protocol-family SOCK_STREAM socket-fd
dup r> r> heap-size connect
dup r> r> connect
zero? err_no EINPROGRESS = or [
dup init-client-socket
dup handle>duplex-stream
@ -92,7 +92,7 @@ USE: io.sockets
: server-fd ( addrspec type -- fd )
>r dup protocol-family r> socket-fd
dup init-server-socket
dup rot make-sockaddr heap-size bind
dup rot make-sockaddr/size bind
zero? [ dup close (io-error) ] unless ;
M: unix-io <server> ( addrspec -- stream )
@ -190,20 +190,19 @@ M: send-task task-container drop write-tasks get ;
M: unix-io send ( packet addrspec datagram -- )
3dup check-datagram-send
[ >r make-sockaddr heap-size r> wait-send ] keep
[ >r make-sockaddr/size r> wait-send ] keep
pending-error ;
M: local protocol-family drop PF_UNIX ;
M: local sockaddr-type drop "sockaddr-un" ;
M: local sockaddr-type drop "sockaddr-un" c-type ;
M: local make-sockaddr
local-path
dup length 1 + max-un-path > [ "Path too long" throw ] when
"sockaddr-un" <c-object>
AF_UNIX over set-sockaddr-un-family
dup sockaddr-un-path rot string>char-alien dup length memcpy
"sockaddr-un" ;
dup sockaddr-un-path rot string>char-alien dup length memcpy ;
M: local parse-sockaddr
drop

View File

@ -153,7 +153,7 @@ M: windows-ce-io WSASocket-flags ( -- DWORD ) 0 ;
: do-connect ( addrspec -- socket )
[ tcp-socket dup ] keep
make-sockaddr heap-size
make-sockaddr/size
f f f f windows.winsock:WSAConnect zero? [
winsock-error-string throw
] unless ;
@ -227,7 +227,7 @@ M: windows-ce-io send ( packet addrspec datagram -- )
[ windows.winsock:set-WSABUF-len ] keep
[ windows.winsock:set-WSABUF-buf ] keep
rot make-sockaddr heap-size
rot make-sockaddr/size
>r >r 1 0 <uint> 0 r> r> f f
windows.winsock:WSASendTo zero? [
winsock-error-string throw

View File

@ -29,8 +29,7 @@ TUPLE: ConnectEx-args port
s* name* namelen* lpSendBuffer* dwSendDataLength*
lpdwBytesSent* lpOverlapped* ptr* ;
: init-connect ( sockaddr sockaddr-name ConnectEx -- )
>r heap-size r>
: init-connect ( sockaddr size ConnectEx -- )
[ set-ConnectEx-args-namelen* ] keep
[ set-ConnectEx-args-name* ] keep
f over set-ConnectEx-args-lpSendBuffer*
@ -55,7 +54,7 @@ TUPLE: ConnectEx-args port
M: windows-nt-io (client) ( addrspec -- duplex-stream )
[
\ ConnectEx-args construct-empty
over make-sockaddr pick init-connect
over make-sockaddr/size pick init-connect
over tcp-socket over set-ConnectEx-args-s*
dup ConnectEx-args-s* add-completion
dup ConnectEx-args-s* get-ConnectEx-ptr over set-ConnectEx-args-ptr*
@ -229,9 +228,9 @@ TUPLE: WSASendTo-args port
>r delegate port-handle delegate win32-file-handle r>
set-WSASendTo-args-s*
] keep [
>r make-sockaddr >r
>r make-sockaddr/size >r
malloc-byte-array dup free-always
r> heap-size r>
r> r>
[ set-WSASendTo-args-iToLen* ] keep
set-WSASendTo-args-lpTo*
] keep [

View File

@ -175,7 +175,7 @@ USE: windows.winsock
: server-fd ( addrspec type -- fd )
>r dup protocol-family r> open-socket
dup close-socket-later
dup rot make-sockaddr heap-size bind socket-error ;
dup rot make-sockaddr/size bind socket-error ;
USE: namespaces