Module socket

This module provides TCP/IP sockets. A socket provides a duplex binary stream. The read and write stream can be obtained by the ordinary ISO core standard open/[3,4] predicates. The open options also apply to sockets so that a binary stream can be easily viewed as a text stream in various encodings.

?- client_new('pot.ty', C), open(C, write, S), 
   write_term(S, 'Hello World!'), nl(S), close(C).

A server socket can be created with the predicates server_new/2. The predicate server_accept/2 delivers a session socket. A client socket can be created with the predicates client_new/3. Server, session and client sockets can be closed with the ISO core standard close/[1,2] predicates.

The predicate websock_new/2 allows promoting a socket to a web socket. The input and output streams will consume and generate web socket frames, but can be used as ordinary ISO core standard streams. During writing a final frame is generated when the predicate flush_output/[1,2] is used.

The following socket predicates are provided:
server_new(P, S):
The predicate succeeds in S with a new server socket for port P.
server_port(S, P):
The predicate succeeds in P with the port of the server socket S.
server_accept(S, H):
The predicate succeeds in H with a new session socket from server socket S.
client_new(H, P, C):
The predicate succeeds in C with a new client socket for host H and port P.
websock_new(S, W):
The predicate succeeds in a web socket W for the socket S.