#! C null value.
0 <alien> ;
-: null? ( alien -- ? ) dup [ alien-address 0 = ] when ;
+: null? ( alien -- ? ) dup alien? [ alien-address 0 = ] when ;
: null>f ( alien -- alien/f )
dup alien-address 0 = [ drop f ] when ;
! Copyright (C) 2004, 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: io-internals
-USING: errors generic hashtables kernel lists math
+USING: alien errors generic hashtables kernel lists math
sequences streams strings threads unix-internals vectors ;
! We want namespaces::bind to shadow the bind system call from
! Some general stuff
: file-mode OCT: 0600 ;
-: io-error ( n -- ) 0 < [ errno strerror throw ] when ;
+: (io-error) errno strerror throw ;
-: init-handle ( fd -- )
- F_SETFL O_NONBLOCK fcntl io-error ;
+: check-null ( n -- ) dup 0 = [ (io-error) ] when ;
+
+: io-error ( n -- ) 0 < [ (io-error) ] when ;
+
+: init-handle ( fd -- ) F_SETFL O_NONBLOCK fcntl io-error ;
! Common delegate of native stream readers and writers
TUPLE: port handle buffer error timeout cutoff ;
: client-sockaddr ( host port -- sockaddr )
#! Error handling here
init-sockaddr [
- >r gethostbyname hostent-addr
- dup 0 = [ -1 io-error ] when r>
- set-sockaddr-in-addr
+ >r gethostbyname dup [ "Host lookup failed" ] unless
+ hostent-addr dup check-null r> set-sockaddr-in-addr
] keep ;
: socket-fd ( -- socket )
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: unix-internals
+USING: alien ;
! FreeBSD
: F_SETFL 4 ;
: O_NONBLOCK 4 ;
+
+BEGIN-STRUCT: sockaddr-in
+ FIELD: uchar len
+ FIELD: uchar family
+ FIELD: ushort port
+ FIELD: in_addr_t addr
+ FIELD: longlong unused
+END-STRUCT
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: unix-internals
+USING: alien ;
! Linux.
: F_SETFL 4 ; ! set file status flags
: O_NONBLOCK 4 ; ! no delay
+
+BEGIN-STRUCT: sockaddr-in
+ FIELD: ushort family
+ FIELD: ushort port
+ FIELD: in_addr_t addr
+ FIELD: longlong unused
+END-STRUCT
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: unix-internals
+USING: alien ;
! Mac OS X
: F_SETFL 4 ;
: O_NONBLOCK 4 ;
+
+BEGIN-STRUCT: sockaddr-in
+ FIELD: uchar len
+ FIELD: uchar family
+ FIELD: ushort port
+ FIELD: in_addr_t addr
+ FIELD: longlong unused
+END-STRUCT
: gethostbyname ( name -- hostent )
"hostent*" "libc" "gethostbyname" [ "char*" ] alien-invoke ;
-BEGIN-STRUCT: sockaddr-in
- FIELD: uchar len
- FIELD: uchar family
- FIELD: ushort port
- FIELD: in_addr_t addr
- FIELD: longlong unused
-END-STRUCT
-
: AF_INET 2 ;
: PF_INET AF_INET ;
: SOCK_STREAM 1 ;