Factor has nice cross-platform support for network programming. As is fairly typical, I am going to use an "echo server" to demonstrate how the libraries work.
The basic logic for an "echo server" is to read input from a client, write it back to them, and repeat until the client disconnects. Using the input and output stream abstraction, we can build a word which does this in a general manner, recursing until
f is read indicating end-of-stream:
: echo-loop ( -- ) 1024 read-partial [ write flush echo-loop ] when* ;
Our "echo server" will use TCP (i.e., connection-oriented networking) and the general server abstraction that comes with Factor with a binary encoding. The server framework uses the name
"echo.server" to automatically log client-related messages (such as connect and disconnect events as well as errors) to
$FACTOR/logs/echo.server. We specify the
echo-loop quotation as the handler for clients:
: <echo-server> ( port -- server ) binary <threaded-server> swap >>insecure "echo.server" >>name [ echo-loop ] >>handler ;
We can start an echo server on, for example, port 12345:
IN: scratchpad 12345 <echo-server> start-server
Testing this is pretty easy using Netcat or a similar client:
$ nc localhost 12345 Hello, Factor Hello, Factor
This is available as the echo-server vocabulary.