Merge branch 'master' of git://factorcode.org/git/factor
commit
a6921edd29
|
|
@ -5,7 +5,8 @@ USING: generic kernel io.backend namespaces continuations sequences
|
|||
arrays io.encodings io.ports io.streams.duplex io.encodings.ascii
|
||||
alien.strings io.binary accessors destructors classes byte-arrays
|
||||
parser alien.c-types math.parser splitting grouping math assocs
|
||||
summary system vocabs.loader combinators present fry vocabs.parser ;
|
||||
summary system vocabs.loader combinators present fry vocabs.parser
|
||||
classes.struct ;
|
||||
IN: io.sockets
|
||||
|
||||
<< {
|
||||
|
|
@ -75,21 +76,20 @@ M: inet4 address-size drop 4 ;
|
|||
|
||||
M: inet4 protocol-family drop PF_INET ;
|
||||
|
||||
M: inet4 sockaddr-size drop "sockaddr-in" heap-size ;
|
||||
M: inet4 sockaddr-size drop sockaddr-in heap-size ;
|
||||
|
||||
M: inet4 empty-sockaddr drop "sockaddr-in" <c-object> ;
|
||||
M: inet4 empty-sockaddr drop sockaddr-in <struct> ;
|
||||
|
||||
M: inet4 make-sockaddr ( inet -- sockaddr )
|
||||
"sockaddr-in" <c-object>
|
||||
AF_INET over set-sockaddr-in-family
|
||||
over port>> htons over set-sockaddr-in-port
|
||||
over host>>
|
||||
"0.0.0.0" or
|
||||
rot inet-pton *uint over set-sockaddr-in-addr ;
|
||||
sockaddr-in <struct>
|
||||
AF_INET >>family
|
||||
swap [ port>> htons >>port ]
|
||||
[ host>> "0.0.0.0" or ]
|
||||
[ inet-pton *uint >>addr ] tri ;
|
||||
|
||||
M: inet4 parse-sockaddr
|
||||
[ dup sockaddr-in-addr <uint> ] dip inet-ntop
|
||||
swap sockaddr-in-port ntohs <inet4> ;
|
||||
M: inet4 parse-sockaddr ( sockaddr-in addrspec -- newaddrspec )
|
||||
[ [ addr>> <uint> ] dip inet-ntop ]
|
||||
[ drop port>> ntohs ] 2bi <inet4> ;
|
||||
|
||||
TUPLE: inet6 < abstract-inet ;
|
||||
|
||||
|
|
@ -131,20 +131,20 @@ M: inet6 address-size drop 16 ;
|
|||
|
||||
M: inet6 protocol-family drop PF_INET6 ;
|
||||
|
||||
M: inet6 sockaddr-size drop "sockaddr-in6" heap-size ;
|
||||
M: inet6 sockaddr-size drop sockaddr-in6 heap-size ;
|
||||
|
||||
M: inet6 empty-sockaddr drop "sockaddr-in6" <c-object> ;
|
||||
M: inet6 empty-sockaddr drop sockaddr-in6 <struct> ;
|
||||
|
||||
M: inet6 make-sockaddr ( inet -- sockaddr )
|
||||
"sockaddr-in6" <c-object>
|
||||
AF_INET6 over set-sockaddr-in6-family
|
||||
over port>> htons over set-sockaddr-in6-port
|
||||
over host>> "::" or
|
||||
rot inet-pton over set-sockaddr-in6-addr ;
|
||||
sockaddr-in6 <struct>
|
||||
AF_INET6 >>family
|
||||
swap [ port>> htons >>port ]
|
||||
[ host>> "::" or ]
|
||||
[ inet-pton >>addr ] tri ;
|
||||
|
||||
M: inet6 parse-sockaddr
|
||||
[ dup sockaddr-in6-addr ] dip inet-ntop
|
||||
swap sockaddr-in6-port ntohs <inet6> ;
|
||||
[ [ addr>> ] dip inet-ntop ]
|
||||
[ drop port>> ntohs ] 2bi <inet6> ;
|
||||
|
||||
: addrspec-of-family ( af -- addrspec )
|
||||
{
|
||||
|
|
@ -154,6 +154,14 @@ M: inet6 parse-sockaddr
|
|||
[ drop f ]
|
||||
} case ;
|
||||
|
||||
: sockaddr-of-family ( af -- addrspec )
|
||||
{
|
||||
{ AF_INET [ sockaddr-in ] }
|
||||
{ AF_INET6 [ sockaddr-in6 ] }
|
||||
{ AF_UNIX [ sockaddr-un ] }
|
||||
[ drop f ]
|
||||
} case ;
|
||||
|
||||
M: f parse-sockaddr nip ;
|
||||
|
||||
GENERIC: (get-local-address) ( handle remote -- sockaddr )
|
||||
|
|
@ -262,11 +270,12 @@ HOOK: (send) io-backend ( packet addrspec datagram -- )
|
|||
check-datagram-send (send) ;
|
||||
|
||||
: addrinfo>addrspec ( addrinfo -- addrspec )
|
||||
[ addrinfo-addr ] [ addrinfo-family addrspec-of-family ] bi
|
||||
[ [ addr>> ] [ family>> sockaddr-of-family ] bi memory>struct ]
|
||||
[ family>> addrspec-of-family ] bi
|
||||
parse-sockaddr ;
|
||||
|
||||
: parse-addrinfo-list ( addrinfo -- seq )
|
||||
[ addrinfo-next ] follow
|
||||
[ next>> dup [ addrinfo memory>struct ] when ] follow
|
||||
[ addrinfo>addrspec ] map
|
||||
sift ;
|
||||
|
||||
|
|
@ -282,9 +291,9 @@ C: <inet> inet
|
|||
{ T{ inet6 f "::" f } T{ inet4 f "0.0.0.0" f } } [ clone ] map ;
|
||||
|
||||
: prepare-addrinfo ( -- addrinfo )
|
||||
"addrinfo" <c-object>
|
||||
PF_UNSPEC over set-addrinfo-family
|
||||
IPPROTO_TCP over set-addrinfo-protocol ;
|
||||
addrinfo <struct>
|
||||
PF_UNSPEC >>family
|
||||
IPPROTO_TCP >>protocol ;
|
||||
|
||||
: fill-in-ports ( addrspecs port -- addrspecs )
|
||||
'[ _ >>port ] map ;
|
||||
|
|
@ -292,7 +301,7 @@ C: <inet> inet
|
|||
M: inet resolve-host
|
||||
[ port>> ] [ host>> ] bi [
|
||||
f prepare-addrinfo f <void*>
|
||||
[ getaddrinfo addrinfo-error ] keep *void*
|
||||
[ getaddrinfo addrinfo-error ] keep *void* addrinfo memory>struct
|
||||
[ parse-addrinfo-list ] keep freeaddrinfo
|
||||
] [ resolve-passive-host ] if*
|
||||
swap fill-in-ports ;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ USING: alien alien.c-types alien.strings generic kernel math threads
|
|||
sequences byte-arrays io.binary io.backend.unix io.streams.duplex
|
||||
io.backend io.pathnames io.files.private io.encodings.utf8 math.parser
|
||||
continuations libc combinators system accessors destructors unix
|
||||
locals init ;
|
||||
locals init classes.struct ;
|
||||
|
||||
EXCLUDE: namespaces => bind ;
|
||||
EXCLUDE: io => read write ;
|
||||
|
|
@ -139,17 +139,17 @@ M: unix (send) ( packet addrspec datagram -- )
|
|||
! Unix domain sockets
|
||||
M: local protocol-family drop PF_UNIX ;
|
||||
|
||||
M: local sockaddr-size drop "sockaddr-un" heap-size ;
|
||||
M: local sockaddr-size drop sockaddr-un heap-size ;
|
||||
|
||||
M: local empty-sockaddr drop "sockaddr-un" <c-object> ;
|
||||
M: local empty-sockaddr drop sockaddr-un <struct> ;
|
||||
|
||||
M: local make-sockaddr
|
||||
path>> (normalize-path)
|
||||
dup length 1 + max-un-path > [ "Path too long" throw ] when
|
||||
"sockaddr-un" <c-object>
|
||||
AF_UNIX over set-sockaddr-un-family
|
||||
[ [ utf8 string>alien ] dip set-sockaddr-un-path ] keep ;
|
||||
sockaddr-un <struct>
|
||||
AF_UNIX >>family
|
||||
swap utf8 string>alien >>path ;
|
||||
|
||||
M: local parse-sockaddr
|
||||
drop
|
||||
sockaddr-un-path utf8 alien>string <local> ;
|
||||
path>> utf8 alien>string <local> ;
|
||||
|
|
|
|||
|
|
@ -27,25 +27,25 @@ CONSTANT: F_SETFD 2
|
|||
CONSTANT: F_SETFL 4
|
||||
CONSTANT: FD_CLOEXEC 1
|
||||
|
||||
C-STRUCT: sockaddr-in
|
||||
{ "uchar" "len" }
|
||||
{ "uchar" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "in_addr_t" "addr" }
|
||||
{ "longlong" "unused" } ;
|
||||
STRUCT: sockaddr-in
|
||||
{ len uchar }
|
||||
{ family uchar }
|
||||
{ port ushort }
|
||||
{ addr in_addr_t }
|
||||
{ unused longlong } ;
|
||||
|
||||
C-STRUCT: sockaddr-in6
|
||||
{ "uchar" "len" }
|
||||
{ "uchar" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "uint" "flowinfo" }
|
||||
{ { "uchar" 16 } "addr" }
|
||||
{ "uint" "scopeid" } ;
|
||||
STRUCT: sockaddr-in6
|
||||
{ len uchar }
|
||||
{ family uchar }
|
||||
{ port ushort }
|
||||
{ flowinfo uint }
|
||||
{ addr uchar[16] }
|
||||
{ scopeid uint } ;
|
||||
|
||||
C-STRUCT: sockaddr-un
|
||||
{ "uchar" "len" }
|
||||
{ "uchar" "family" }
|
||||
{ { "char" 104 } "path" } ;
|
||||
STRUCT: sockaddr-un
|
||||
{ len uchar }
|
||||
{ family uchar }
|
||||
{ path char[104] } ;
|
||||
|
||||
STRUCT: passwd
|
||||
{ pw_name char* }
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@ IN: unix
|
|||
|
||||
CONSTANT: FD_SETSIZE 1024
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "socklen_t" "addrlen" }
|
||||
{ "char*" "canonname" }
|
||||
{ "void*" "addr" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen socklen_t }
|
||||
{ canonname char* }
|
||||
{ addr void* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
STRUCT: dirent
|
||||
{ d_fileno u_int32_t }
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@ IN: unix
|
|||
|
||||
CONSTANT: FD_SETSIZE 1024
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "socklen_t" "addrlen" }
|
||||
{ "char*" "canonname" }
|
||||
{ "void*" "addr" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen socklen_t }
|
||||
{ canonname char* }
|
||||
{ addr void* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
CONSTANT: _UTX_USERSIZE 256
|
||||
CONSTANT: _UTX_LINESIZE 32
|
||||
|
|
|
|||
|
|
@ -4,15 +4,15 @@ IN: unix
|
|||
|
||||
CONSTANT: FD_SETSIZE 256
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "socklen_t" "addrlen" }
|
||||
{ "char*" "canonname" }
|
||||
{ "void*" "addr" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen socklen_t }
|
||||
{ canonname char* }
|
||||
{ addr void* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
STRUCT: dirent
|
||||
{ d_fileno __uint32_t }
|
||||
|
|
|
|||
|
|
@ -1,18 +1,18 @@
|
|||
! Copyright (C) 2008 Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: alien.syntax unix.time ;
|
||||
USING: alien.syntax unix.time classes.struct ;
|
||||
IN: unix
|
||||
|
||||
C-STRUCT: sockaddr_storage
|
||||
{ "__uint8_t" "ss_len" }
|
||||
{ "sa_family_t" "ss_family" }
|
||||
{ { "char" _SS_PAD1SIZE } "__ss_pad1" }
|
||||
{ "__int64_t" "__ss_align" }
|
||||
{ { "char" _SS_PAD2SIZE } "__ss_pad2" } ;
|
||||
STRUCT: sockaddr_storage
|
||||
{ ss_len __uint8_t }
|
||||
{ ss_family sa_family_t }
|
||||
{ __ss_pad1 { "char" _SS_PAD1SIZE } }
|
||||
{ __ss_align __int64_t }
|
||||
{ __ss_pad2 { "char" _SS_PAD2SIZE } } ;
|
||||
|
||||
C-STRUCT: exit_struct
|
||||
{ "uint16_t" "e_termination" }
|
||||
{ "uint16_t" "e_exit" } ;
|
||||
STRUCT: exit_struct
|
||||
{ e_termination uint16_t }
|
||||
{ e_exit uint16_t } ;
|
||||
|
||||
C-STRUCT: utmpx
|
||||
{ { "char" _UTX_USERSIZE } "ut_user" }
|
||||
|
|
|
|||
|
|
@ -3,15 +3,15 @@ IN: unix
|
|||
|
||||
CONSTANT: FD_SETSIZE 1024
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "socklen_t" "addrlen" }
|
||||
{ "void*" "addr" }
|
||||
{ "char*" "canonname" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen socklen_t }
|
||||
{ addr void* }
|
||||
{ canonname char* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
STRUCT: dirent
|
||||
{ d_fileno __uint32_t }
|
||||
|
|
|
|||
|
|
@ -33,34 +33,34 @@ CONSTANT: FD_CLOEXEC 1
|
|||
|
||||
CONSTANT: F_SETFL 4
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "socklen_t" "addrlen" }
|
||||
{ "void*" "addr" }
|
||||
{ "char*" "canonname" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen socklen_t }
|
||||
{ addr void* }
|
||||
{ canonname char* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
C-STRUCT: sockaddr-in
|
||||
{ "ushort" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "in_addr_t" "addr" }
|
||||
{ "longlong" "unused" } ;
|
||||
STRUCT: sockaddr-in
|
||||
{ family ushort }
|
||||
{ port ushort }
|
||||
{ addr in_addr_t }
|
||||
{ unused longlong } ;
|
||||
|
||||
C-STRUCT: sockaddr-in6
|
||||
{ "ushort" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "uint" "flowinfo" }
|
||||
{ { "uchar" 16 } "addr" }
|
||||
{ "uint" "scopeid" } ;
|
||||
STRUCT: sockaddr-in6
|
||||
{ family ushort }
|
||||
{ port ushort }
|
||||
{ flowinfo uint }
|
||||
{ addr uchar[16] }
|
||||
{ scopeid uint } ;
|
||||
|
||||
CONSTANT: max-un-path 108
|
||||
|
||||
C-STRUCT: sockaddr-un
|
||||
{ "ushort" "family" }
|
||||
{ { "char" max-un-path } "path" } ;
|
||||
STRUCT: sockaddr-un
|
||||
{ family ushort }
|
||||
{ path { "char" max-un-path } } ;
|
||||
|
||||
CONSTANT: SOCK_STREAM 1
|
||||
CONSTANT: SOCK_DGRAM 2
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
! Copyright (C) 2006 Patrick Mauritz.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
IN: unix
|
||||
USING: alien.syntax system kernel layouts ;
|
||||
IN: unix
|
||||
|
||||
! Solaris.
|
||||
|
||||
|
|
@ -26,37 +26,37 @@ CONSTANT: SO_RCVTIMEO HEX: 1006
|
|||
CONSTANT: F_SETFL 4 ! set file status flags
|
||||
CONSTANT: O_NONBLOCK HEX: 80 ! no delay
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
! #ifdef __sparcv9
|
||||
! int _ai_pad;
|
||||
! #endif
|
||||
{ "int" "addrlen" }
|
||||
{ "char*" "canonname" }
|
||||
{ "void*" "addr" }
|
||||
{ "void*" "next" } ;
|
||||
{ addrlen int }
|
||||
{ canonname char* }
|
||||
{ addr void* }
|
||||
{ next void* } ;
|
||||
|
||||
C-STRUCT: sockaddr-in
|
||||
{ "ushort" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "in_addr_t" "addr" }
|
||||
{ "longlong" "unused" } ;
|
||||
STRUCT: sockaddr-in
|
||||
{ family ushort }
|
||||
{ port ushort }
|
||||
{ addr in_addr_t }
|
||||
{ unused longlong } ;
|
||||
|
||||
C-STRUCT: sockaddr-in6
|
||||
{ "ushort" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "uint" "flowinfo" }
|
||||
{ { "uchar" 16 } "addr" }
|
||||
{ "uint" "scopeid" } ;
|
||||
STRUCT: sockaddr-in6
|
||||
{ family ushort }
|
||||
{ port ushort }
|
||||
{ flowinfo uint }
|
||||
{ addr uchar[16] }
|
||||
{ scopeid uint } ;
|
||||
|
||||
: max-un-path 108 ;
|
||||
|
||||
C-STRUCT: sockaddr-un
|
||||
{ "ushort" "family" }
|
||||
{ { "char" max-un-path } "path" } ;
|
||||
STRUCT: sockaddr-un
|
||||
{ family ushort }
|
||||
{ path { "char" max-un-path } } ;
|
||||
|
||||
CONSTANT: EINTR 4
|
||||
CONSTANT: EAGAIN 11
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ CONSTANT: SO_BROADCAST HEX: 20
|
|||
CONSTANT: SO_USELOOPBACK HEX: 40
|
||||
CONSTANT: SO_LINGER HEX: 80
|
||||
CONSTANT: SO_OOBINLINE HEX: 100
|
||||
: SO_DONTLINGER ( -- n ) SO_LINGER bitnot ; inline
|
||||
CONSTANT: SO_DONTLINGER $[ SO_LINGER bitnot ]
|
||||
|
||||
CONSTANT: SO_SNDBUF HEX: 1001
|
||||
CONSTANT: SO_RCVBUF HEX: 1002
|
||||
|
|
@ -75,7 +75,7 @@ CONSTANT: PF_INET6 23
|
|||
CONSTANT: AI_PASSIVE 1
|
||||
CONSTANT: AI_CANONNAME 2
|
||||
CONSTANT: AI_NUMERICHOST 4
|
||||
: AI_MASK ( -- n ) { AI_PASSIVE AI_CANONNAME AI_NUMERICHOST } flags ;
|
||||
CONSTANT: AI_MASK $[ { AI_PASSIVE AI_CANONNAME AI_NUMERICHOST } flags ]
|
||||
|
||||
CONSTANT: NI_NUMERICHOST 1
|
||||
CONSTANT: NI_NUMERICSERV 2
|
||||
|
|
@ -96,7 +96,7 @@ ALIAS: WSA_IO_PENDING ERROR_IO_PENDING
|
|||
|
||||
CONSTANT: INADDR_ANY 0
|
||||
|
||||
: INVALID_SOCKET ( -- alien ) -1 <alien> ; inline
|
||||
CONSTANT: INVALID_SOCKET $[ -1 <alien> ]
|
||||
CONSTANT: SOCKET_ERROR -1
|
||||
|
||||
CONSTANT: SD_RECV 0
|
||||
|
|
@ -109,18 +109,18 @@ CONSTANT: SOL_SOCKET HEX: ffff
|
|||
! C-STRUCT: in_addr
|
||||
! { "in_addr_t" "s_addr" } ;
|
||||
|
||||
C-STRUCT: sockaddr-in
|
||||
{ "short" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "uint" "addr" }
|
||||
{ { "char" 8 } "pad" } ;
|
||||
STRUCT: sockaddr-in
|
||||
{ family short }
|
||||
{ port ushort }
|
||||
{ addr uint }
|
||||
{ pad char[8] } ;
|
||||
|
||||
C-STRUCT: sockaddr-in6
|
||||
{ "uchar" "family" }
|
||||
{ "ushort" "port" }
|
||||
{ "uint" "flowinfo" }
|
||||
{ { "uchar" 16 } "addr" }
|
||||
{ "uint" "scopeid" } ;
|
||||
STRUCT: sockaddr-in6
|
||||
{ family uchar }
|
||||
{ port ushort }
|
||||
{ flowinfo uint }
|
||||
{ addr uchar[16] }
|
||||
{ scopeid uint } ;
|
||||
|
||||
STRUCT: hostent
|
||||
{ name char* }
|
||||
|
|
@ -129,15 +129,15 @@ STRUCT: hostent
|
|||
{ length short }
|
||||
{ addr-list void* } ;
|
||||
|
||||
C-STRUCT: addrinfo
|
||||
{ "int" "flags" }
|
||||
{ "int" "family" }
|
||||
{ "int" "socktype" }
|
||||
{ "int" "protocol" }
|
||||
{ "size_t" "addrlen" }
|
||||
{ "char*" "canonname" }
|
||||
{ "sockaddr*" "addr" }
|
||||
{ "addrinfo*" "next" } ;
|
||||
STRUCT: addrinfo
|
||||
{ flags int }
|
||||
{ family int }
|
||||
{ socktype int }
|
||||
{ protocol int }
|
||||
{ addrlen size_t }
|
||||
{ canonname char* }
|
||||
{ addr sockaddr* }
|
||||
{ next addrinfo* } ;
|
||||
|
||||
C-STRUCT: timeval
|
||||
{ "long" "sec" }
|
||||
|
|
|
|||
Loading…
Reference in New Issue