\r
<erg> if write returns -1 and errno == EINTR then it's not a real error, you can try again\r
- single-stepper and variable access: wrong namespace?\r
-- investigate if COPYING_GEN needs a fix\r
- http keep alive, and range get\r
- sleep word\r
- fix i/o on generic x86/ppc unix\r
10 <vector> meta-r set
10 <vector> meta-d set
namestack meta-n set
- f meta-c set
+ catchstack meta-c set
f meta-cf set
f meta-executing set ;
#! swap in the old stacks. This is so messy.
push-d datastack push-d
meta-d get set-datastack
+ catchstack >r meta-c set-catchstack
+ namestack >r meta-n set-namestack
>r execute datastack r> tuck push
+ r> set-namestack
+ r> set-catchstack
set-datastack meta-d set ;
: meta-call ( quot -- )
\ datastack [ meta-d get clone push-d ] set-meta-word
\ set-datastack [ pop-d clone meta-d set ] set-meta-word
-\ >r [ pop-d push-r ] set-meta-word
-\ r> [ pop-r push-d ] set-meta-word
+\ >r [ pop-d push-r ] set-meta-word
+\ r> [ pop-r push-d ] set-meta-word
\ callstack [ meta-r get clone push-d ] set-meta-word
\ set-callstack [ pop-d clone meta-r set ] set-meta-word
-\ namestack [ meta-n get push-d ] set-meta-word
-\ set-namestack [ pop-d meta-n set ] set-meta-word
-\ catchstack [ meta-c get push-d ] set-meta-word
-\ set-catchstack [ pop-d meta-c set ] set-meta-word
\ call [ pop-d meta-call ] set-meta-word
\ execute [ pop-d meta-word ] set-meta-word
\ ifte [ pop-d pop-d pop-d [ nip ] [ drop ] ifte meta-call ] set-meta-word
: (io-error) errno strerror throw ;
-: check-null ( n -- ) dup 0 = [ (io-error) ] when ;
+: check-null ( n -- ) 0 = [ (io-error) ] when ;
: io-error ( n -- ) 0 < [ (io-error) ] when ;
! We need to fiddle with the exact search order here, since
! unix-internals::accept shadows streams::accept.
IN: io-internals
-USING: namespaces streams threads unparser ;
+USING: errors namespaces streams threads unparser ;
USING: alien generic kernel math unix-internals ;
: init-sockaddr ( port -- sockaddr )
: client-sockaddr ( host port -- sockaddr )
#! Error handling here
init-sockaddr [
- >r gethostbyname dup [ "Host lookup failed" ] unless
- hostent-addr dup check-null r> set-sockaddr-in-addr
+ >r gethostbyname dup [
+ "Host lookup failed" throw
+ ] unless hostent-addr dup check-null
+ r> set-sockaddr-in-addr
] keep ;
: socket-fd ( -- socket )