2005-01-30 15:57:25 -05:00
|
|
|
! Copyright (C) 2004, 2005 Slava Pestov.
|
|
|
|
|
! See http://factor.sf.net/license.txt for BSD license.
|
2004-11-25 21:53:27 -05:00
|
|
|
IN: streams
|
2005-01-30 15:57:25 -05:00
|
|
|
USING: io-internals errors hashtables kernel stdio strings
|
|
|
|
|
namespaces unparser generic ;
|
2004-11-25 21:53:27 -05:00
|
|
|
|
2005-03-18 19:38:27 -05:00
|
|
|
! A TCP client socket stream.
|
2005-03-08 22:54:59 -05:00
|
|
|
TUPLE: client-stream host ;
|
2004-11-25 21:53:27 -05:00
|
|
|
|
2005-01-30 15:57:25 -05:00
|
|
|
C: client-stream ( host port in out -- stream )
|
2005-02-14 22:15:02 -05:00
|
|
|
#! stream-flush yields until connection is established.
|
2005-03-08 22:54:59 -05:00
|
|
|
[ >r <fd-stream> r> set-delegate ] keep
|
2005-01-30 15:57:25 -05:00
|
|
|
[ >r ":" swap unparse cat3 r> set-client-stream-host ] keep
|
2005-02-14 22:15:02 -05:00
|
|
|
dup stream-flush ;
|
2005-01-30 15:57:25 -05:00
|
|
|
|
|
|
|
|
: <client> ( host port -- stream )
|
2005-03-18 19:38:27 -05:00
|
|
|
#! Connect to a port number on a TCP host.
|
2005-01-30 15:57:25 -05:00
|
|
|
2dup client-socket <client-stream> ;
|
2004-11-25 21:53:27 -05:00
|
|
|
|
2005-03-18 19:38:27 -05:00
|
|
|
! A server socket that listens on a port for TCP connections.
|
|
|
|
|
TUPLE: server port ;
|
|
|
|
|
GENERIC: accept ( server -- socket )
|
|
|
|
|
|
|
|
|
|
C: server ( port -- stream )
|
|
|
|
|
#! Starts listening for TCP connections on localhost:port.
|
|
|
|
|
[ >r server-socket r> set-server-port ] keep ;
|
|
|
|
|
|
|
|
|
|
M: server stream-close ( stream -- )
|
|
|
|
|
server-port close-port ;
|
|
|
|
|
|
2004-12-27 06:56:05 -05:00
|
|
|
M: server accept ( server -- client )
|
2005-03-18 19:38:27 -05:00
|
|
|
#! Accept a TCP connection from a server socket.
|
2005-01-30 15:57:25 -05:00
|
|
|
server-port blocking-accept <client-stream> ;
|