unix.ffi, windows.winsock: wraps for servent functions
parent
32b07016b0
commit
7c179f876c
|
@ -169,3 +169,5 @@ os unix? [
|
||||||
! Binding to all interfaces should work
|
! Binding to all interfaces should work
|
||||||
[ ] [ f 0 <inet4> <datagram> dispose ] unit-test
|
[ ] [ f 0 <inet4> <datagram> dispose ] unit-test
|
||||||
[ ] [ f 0 <inet6> <datagram> dispose ] unit-test
|
[ ] [ f 0 <inet6> <datagram> dispose ] unit-test
|
||||||
|
|
||||||
|
[ 80 ] [ "http" protocol-port ] unit-test
|
||||||
|
|
|
@ -464,6 +464,9 @@ M: invalid-local-address summary
|
||||||
[ invalid-local-address ] if
|
[ invalid-local-address ] if
|
||||||
] dip with-variable ; inline
|
] dip with-variable ; inline
|
||||||
|
|
||||||
|
: protocol-port ( protocol -- port )
|
||||||
|
f getservbyname [ port>> htons ] [ f ] if* ;
|
||||||
|
|
||||||
{
|
{
|
||||||
{ [ os unix? ] [ "io.sockets.unix" require ] }
|
{ [ os unix? ] [ "io.sockets.unix" require ] }
|
||||||
{ [ os windows? ] [ "io.sockets.windows" require ] }
|
{ [ os windows? ] [ "io.sockets.windows" require ] }
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
IN: unix.ffi.tests
|
||||||
|
USING: accessors alien.c-types tools.test unix.ffi ;
|
||||||
|
|
||||||
|
[ 80 ] [ "http" f getservbyname port>> ntohs ] unit-test
|
||||||
|
|
||||||
|
[ "www" ] [
|
||||||
|
0 "http" f getservbyname aliases>> c-string alien-element
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[ "http" ] [ 80 htons f getservbyport name>> ] unit-test
|
|
@ -62,6 +62,12 @@ STRUCT: iovec
|
||||||
{ iov_base void* }
|
{ iov_base void* }
|
||||||
{ iov_len size_t } ;
|
{ iov_len size_t } ;
|
||||||
|
|
||||||
|
STRUCT: servent
|
||||||
|
{ name c-string }
|
||||||
|
{ aliases void* }
|
||||||
|
{ port int }
|
||||||
|
{ proto c-string } ;
|
||||||
|
|
||||||
CONSTANT: F_OK 0 ! test for existence of file
|
CONSTANT: F_OK 0 ! test for existence of file
|
||||||
CONSTANT: X_OK 1 ! test for execute or search permission
|
CONSTANT: X_OK 1 ! test for execute or search permission
|
||||||
CONSTANT: W_OK 2 ! test for write permission
|
CONSTANT: W_OK 2 ! test for write permission
|
||||||
|
@ -121,6 +127,8 @@ FUNCTION: int gethostname ( c-string name, int len ) ;
|
||||||
FUNCTION: int getsockname ( int socket, sockaddr* address, socklen_t* address_len ) ;
|
FUNCTION: int getsockname ( int socket, sockaddr* address, socklen_t* address_len ) ;
|
||||||
FUNCTION: int getpeername ( int socket, sockaddr* address, socklen_t* address_len ) ;
|
FUNCTION: int getpeername ( int socket, sockaddr* address, socklen_t* address_len ) ;
|
||||||
FUNCTION: protoent* getprotobyname ( c-string name ) ;
|
FUNCTION: protoent* getprotobyname ( c-string name ) ;
|
||||||
|
FUNCTION: servent* getservbyname ( c-string name, c-string prot ) ;
|
||||||
|
FUNCTION: servent* getservbyport ( int port, c-string prot ) ;
|
||||||
FUNCTION: uid_t getuid ;
|
FUNCTION: uid_t getuid ;
|
||||||
FUNCTION: uint htonl ( uint n ) ;
|
FUNCTION: uint htonl ( uint n ) ;
|
||||||
FUNCTION: ushort htons ( ushort n ) ;
|
FUNCTION: ushort htons ( ushort n ) ;
|
||||||
|
|
|
@ -87,14 +87,6 @@ M: string >url
|
||||||
|
|
||||||
M: pathname >url string>> >url ;
|
M: pathname >url string>> >url ;
|
||||||
|
|
||||||
: protocol-port ( protocol -- port )
|
|
||||||
{
|
|
||||||
{ "http" [ 80 ] }
|
|
||||||
{ "https" [ 443 ] }
|
|
||||||
{ "ftp" [ 21 ] }
|
|
||||||
[ drop f ]
|
|
||||||
} case ;
|
|
||||||
|
|
||||||
: relative-url ( url -- url' )
|
: relative-url ( url -- url' )
|
||||||
clone
|
clone
|
||||||
f >>protocol
|
f >>protocol
|
||||||
|
|
|
@ -146,6 +146,10 @@ STRUCT: timeval
|
||||||
{ sec long }
|
{ sec long }
|
||||||
{ usec long } ;
|
{ usec long } ;
|
||||||
|
|
||||||
|
STRUCT: servent
|
||||||
|
{ name c-string }
|
||||||
|
{ proto c-string } ;
|
||||||
|
|
||||||
GENERIC: sockaddr>ip ( sockaddr -- string )
|
GENERIC: sockaddr>ip ( sockaddr -- string )
|
||||||
|
|
||||||
M: sockaddr-in sockaddr>ip ( sockaddr -- string )
|
M: sockaddr-in sockaddr>ip ( sockaddr -- string )
|
||||||
|
@ -187,6 +191,9 @@ FUNCTION: int getpeername ( SOCKET s, sockaddr-in* address, int* addrlen ) ;
|
||||||
|
|
||||||
FUNCTION: protoent* getprotobyname ( c-string name ) ;
|
FUNCTION: protoent* getprotobyname ( c-string name ) ;
|
||||||
|
|
||||||
|
FUNCTION: servent* getservbyname ( c-string name, c-string prot ) ;
|
||||||
|
FUNCTION: servent* getservbyport ( c-string name, c-string prot ) ;
|
||||||
|
|
||||||
TYPEDEF: uint SERVICETYPE
|
TYPEDEF: uint SERVICETYPE
|
||||||
TYPEDEF: OVERLAPPED WSAOVERLAPPED
|
TYPEDEF: OVERLAPPED WSAOVERLAPPED
|
||||||
TYPEDEF: WSAOVERLAPPED* LPWSAOVERLAPPED
|
TYPEDEF: WSAOVERLAPPED* LPWSAOVERLAPPED
|
||||||
|
@ -430,7 +437,7 @@ ERROR: winsock-exception n string ;
|
||||||
|
|
||||||
: throw-winsock-error ( -- * )
|
: throw-winsock-error ( -- * )
|
||||||
WSAGetLastError (throw-winsock-error) ;
|
WSAGetLastError (throw-winsock-error) ;
|
||||||
|
|
||||||
: winsock-error=0/f ( n/f -- )
|
: winsock-error=0/f ( n/f -- )
|
||||||
{ 0 f } member? [ throw-winsock-error ] when ;
|
{ 0 f } member? [ throw-winsock-error ] when ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue