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