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

View File

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

View File

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

View File

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