This library package defines a number of predicates manipulating
sockets. They are all rather straight-forward interfaces to the
corresponding BSD-type socket functions with the same name (except
current_host/1
). The reader should therefore study the
appropriate documents for a deeper description.
The Domain is either the atom 'AF_INET'
or
'AF_UNIX'
. They correspond directly to the same domains in
BSD-type sockets. 'AF_UNIX'
may not be available on non-UNIX
platforms.
An Address is either 'AF_INET'(Host,Port)
or
'AF_UNIX'(SocketName)
. Host is an atomic hostname,
Port is a portnumber and SocketName is an atom denoting a
socket. A reader familiar with BSD sockets will understand this
immediately.
All streams below can be both read from and written on. All I/O-predicates
operating on streams can be used, for example read/2
, write/2
,
format/3
, current_stream/3
, etc. Socket streams are unbuffered
on reads and block buffered on writes.
To load the package, enter the query
| ?- use_module(library(sockets)).
socket(+Domain, -Socket)
socket_close(+Socket)
socket_connect/2
should
not be closed by socket_close/1
as they will be closed when the
corresponding stream is closed.
socket_bind(+Socket, 'AF_UNIX'(+SocketName)
)
socket_bind(+Socket, 'AF_INET'(?Host,?Port)
)
socket_connect(+Socket, 'AF_UNIX'(+SocketName)
, -Stream)
socket_connect(+Socket, 'AF_INET'(+Host,+Port)
, -Stream)
socket_listen(+Socket, +Length)
socket_accept(+Socket, -Stream)
socket_accept(+Socket, -Client, -Stream)
'AF_INET'
domain, Client will unified with an atom
containing the Internet host address of the connecting entity in
numbers-and-dots notation. For other domains, Client will not be
used.
socket_select(+TermsSockets, -NewTermsStreams, +TimeOut, +Streams, -ReadStreams)
socket_select/5
also waits for connections to the sockets
specified by TermsSockets. This argument should be a list of
Term-
Socket pairs, where Term, which can be any term,
is used as an identifier. NewTermsStreams is a
list of Term-connection(Client,Stream)
pairs,
where Stream is a new stream open for communicating with a process
connecting to the socket identified with Term, Client is the
client host address (see socket_accept/3
).
If TimeOut is instantiated to off
, the predicate waits
until something is available. If TimeOut is S:U
the
predicate waits at most S
seconds and U
microseconds.
Both S
and U
must be integers >=0. If there is a timeout,
ReadStreams and NewTermsStreams are []
.
socket_select(+Sockets, -NewStreams, +TimeOut, +Streams, -ReadStreams)
socket_select(+Socket, -NewStream, +TimeOut, +Streams, -ReadStreams)
socket_select(+Sockets, -NewStreams, -NewClients, +TimeOut, +Streams, -ReadStreams)
socket_select(+Socket, -NewStream, -NewClient, +TimeOut, +Streams, -ReadStreams)
socket_select/5-6
also wait for connections to the sockets in
the list Sockets. NewStreams is the list of new streams
opened for communicating with the connecting processes. NewClients
is the corresponding list of client host addresses (see
socket_accept/3
).
The second form requires one socket (not a list) for the first argument
and returns a stream, NewStream, if a connection is made.
current_host(?HostName)
hostname_address(+HostName, -HostAddress)
hostname_address(-HostName, +HostAddress)