Refactor I/O a bit so that C types are resolved at compile time -- better for deployment
parent
dfeb154bb1
commit
de582084a4
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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 [
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue