Author(s): Manuel Carro, Daniel Cabeza.
Version: 1.11#222 (2004/5/24, 13:8:7 CEST)
Version of last change: 1.7#58 (2001/2/8, 11:46:41 CET)
This module defines primitives to open sockets, send, and receive data from them. This allows communicating with other processes, on the same machine or across the Internet. The reader should also consult standard bibliography on the topic for a proper use of these primitives.
sockets
):- use_module(library(sockets)).
sockets
)
Usage: connect_to_socket(Host, Port, Stream)
connect_to_socket_type/4
with SOCK_STREAM connection type. This is the connection type you want in order to use the
write/2
and
read/2
predicates (and other stream IO related predicates).
Host
is an atom.
(basic_props:atm/1
)
Port
is an integer.
(basic_props:int/1
)
Stream
is an open stream.
(streams_basic:stream/1
)
Host
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Port
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Stream
is a free variable.
(term_typing:var/1
)
Usage: socket_recv(Stream, String)
socket_recv_code/3
, but the return code is ignored.
Stream
is an open stream.
(streams_basic:stream/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Stream
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Defines the atoms which can be used to specify the socket type recognized by
connect_to_socket_type/4
. Defined as follows:
socket_type(stream). socket_type(dgram). socket_type(raw). socket_type(seqpacket). socket_type(rdm).
Usage: socket_type(T)
T
is a valid socket type.
Usage: shutdown_type(T)
T
is a valid shutdown type.
Usage: hostname_address(Hostname, Address)
Address
is unified with the atom representing the address (in AF_INET format) corresponding to Hostname
.
Hostname
is an atom.
(basic_props:atm/1
)
Address
is an atom.
(basic_props:atm/1
)
Hostname
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage: socket_shutdown(Stream, How)
Stream
is associated. All or part of the communication can be shutdown, depending on the value of How
. The atoms read
, write
, or read_write
should be used to denote the type of closing required.
Stream
is an open stream.
(streams_basic:stream/1
)
How
is a valid shutdown type.
(sockets:shutdown_type/1
)
Stream
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
How
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage: socket_recv_code(Stream, String, Length)
String
from the socket associated to Stream
, and returns its Length
. If Length
is -1, no more data is available.
Stream
is an open stream.
(streams_basic:stream/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Length
is an integer.
(basic_props:int/1
)
Stream
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage: socket_send(Stream, String)
String
to the socket associated to Stream
. The socket has to be in connected state. String
is not supposed to be NULL terminated, since it is a Prolog string. If a NULL terminated string is needed at the other side, it has to be explicitly created in Prolog.
Stream
is an open stream.
(streams_basic:stream/1
)
String
is a string (a list of character codes).
(basic_props:string/1
)
Stream
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
String
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Usage: select_socket(Socket, NewStream, TO_ms, Streams, ReadStreams)
Streams
and in a Socket
. Streams
is a list of Prolog streams which will be tested for reading. Socket
is a socket (i.e., an integer denoting the O.S. port number) or a
free variable. TO_ms
is a number denoting a timeout. Within this timeout the Streams
and the Socket
are checked for the availability of data to be read. ReadStreams
is the list of streams belonging to Streams
which have data pending to be read. If Socket
was a free variable, it is ignored, and NewStream
is not checked. If Socket
was instantiated to a port number and there are connections pending, a connection is accepted and connected with the Prolog stream in NewStream
.
Socket
is an integer.
(basic_props:int/1
)
NewStream
is an open stream.
(streams_basic:stream/1
)
TO_ms
is an integer.
(basic_props:int/1
)
Streams
is a list of stream
s.
(basic_props:list/2
)
ReadStreams
is a list of stream
s.
(basic_props:list/2
)
Socket
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
NewStream
is a free variable.
(term_typing:var/1
)
TO_ms
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Streams
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
ReadStreams
is a free variable.
(term_typing:var/1
)
Usage: socket_accept(Sock, Stream)
Stream
connected to Sock
.
Sock
is an integer.
(basic_props:int/1
)
Stream
is an open stream.
(streams_basic:stream/1
)
Sock
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Stream
is a free variable.
(term_typing:var/1
)
Usage: bind_socket(Port, Length, Socket)
Socket
bound to Port
(which may be assigned by the OS or defined by the caller), and listens to it (hence no listen call in this set of primitives). Length
specifies the maximum number of pending connections.
Port
is an integer.
(basic_props:int/1
)
Length
is an integer.
(basic_props:int/1
)
Socket
is an integer.
(basic_props:int/1
)
Length
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Socket
is a free variable.
(term_typing:var/1
)
Usage: connect_to_socket_type(Host, Port, Type, Stream)
Stream
which connects to Host
. The Type
of connection can be defined. A Stream
is returned, which can be used to
write/2
to, to
read/2
, to
socket_send/2
to, or to
socket_recv/2
from the socket.
Host
is currently instantiated to an atom.
(term_typing:atom/1
)
Port
is an integer.
(basic_props:int/1
)
Type
is a valid socket type.
(sockets:socket_type/1
)
Stream
is an open stream.
(streams_basic:stream/1
)
Host
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Port
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Type
is currently a term which is not a free variable.
(term_typing:nonvar/1
)
Stream
is a free variable.
(term_typing:var/1
)
Go to the first, previous, next, last section, table of contents.