version 1.7, 2006/04/10 09:23:45
|
version 1.8, 2006/10/07 17:00:50
|
Line 19
|
Line 19
|
\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
\ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. |
|
|
require lib.fs |
require lib.fs |
[IFUNDEF] libc library libc libc.so.6 [THEN] |
[IFUNDEF] libc |
|
s" os-type" environment? [IF] |
|
2dup s" linux-gnu" str= [IF] 2drop |
|
library libc libc.so.6 |
|
[ELSE] 2dup s" cygwin" str= [IF] 2drop |
|
library libc cygwin1.dll |
|
[ELSE] s" bsd" str= [IF] |
|
library libc libc.so.5 |
|
[THEN] |
|
[THEN] |
|
[THEN] |
|
[THEN] |
|
[THEN] |
|
|
libc gethostbyname ptr (ptr) gethostbyname ( name -- hostent ) |
libc gethostbyname ptr (ptr) gethostbyname ( name -- hostent ) |
libc socket int int int (int) socket ( class type proto -- fd ) |
libc socket int int int (int) socket ( class type proto -- fd ) |
libc connect int ptr int (int) connect ( fd sock size -- err ) |
libc connect int ptr int (int) connect ( fd sock size -- err ) |
libc fdopen int ptr (ptr) fdopen ( fd fileattr -- file ) |
libc fdopen int ptr (ptr) fdopen ( fd fileattr -- file ) |
libc htonl int (int) htonl ( x -- x' ) |
libc htonl int (int) htonl ( x -- x' ) |
|
libc htons int (int) htons ( x -- x' ) |
|
libc ntohl int (int) ntohl ( x -- x' ) |
|
|
4 4 2Constant int% |
4 4 2Constant int% |
|
2 2 2Constant short% |
|
|
struct |
struct |
cell% field h_name |
cell% field h_name |
Line 38 struct
|
Line 53 struct
|
end-struct hostent |
end-struct hostent |
|
|
struct |
struct |
int% field family+port |
short% field family |
|
short% field port |
int% field sin_addr |
int% field sin_addr |
cell% 2* field padding |
cell% 2* field padding |
end-struct sockaddr_in |
end-struct sockaddr_in |
Line 59 sockaddr-tmp sockaddr_in %size dup allot
|
Line 75 sockaddr-tmp sockaddr_in %size dup allot
|
1 Constant SOCK_STREAM |
1 Constant SOCK_STREAM |
6 Constant IPPROTO_TCP |
6 Constant IPPROTO_TCP |
|
|
: open-socket ( addr u port -- fid ) |
: new-socket ( -- socket ) |
htonl PF_INET [ base c@ 0= ] [IF] $10 lshift [THEN] |
|
or sockaddr-tmp family+port l! |
|
host>addr sockaddr-tmp sin_addr l! |
|
PF_INET SOCK_STREAM IPPROTO_TCP socket |
PF_INET SOCK_STREAM IPPROTO_TCP socket |
dup 0<= abort" no free socket" >r |
dup 0<= abort" no free socket" ; |
r@ sockaddr-tmp $10 connect 0< abort" can't connect" |
|
|
: >inetaddr ( ip port sockaddr -- ) >r |
|
r@ sockaddr_in %size erase |
|
PF_INET r@ family w! |
|
htons r@ port w! |
|
htonl r> sin_addr l! ; |
|
|
|
: open-socket ( addr u port -- fid ) |
|
-rot host>addr swap sockaddr-tmp >inetaddr |
|
new-socket >r |
|
r@ sockaddr-tmp sockaddr_in %size connect 0< abort" can't connect" |
r> s" w+" c-string fdopen ; |
r> s" w+" c-string fdopen ; |