


The standard library Socket api defines access to TCP/IP network socket functionality.
The Socket api is implemented by the socket package.
The Socket api source code is in src/lib/std/src/socket/socket.api.
See also: Socket_Junk.
See also: Posix_1003_1b.
See also: Synchronous_Socket.
See also: Threadkit_Socket.
The above information is manually maintained and may contain errors.
api {
Socket (X, Y);
Socket_Address X;
Datagram ;
Stream X;
Passive ;
Active ;
package af : api {
Address_Family = Address_Family;
list : Void -> List(((String , Address_Family)) );
to_string : Address_Family -> String;
from_string : String -> Null_Or(Address_Family );
};;
package socket : api {
eqtype Socket_Type ;
stream : Socket_Type;
datagram : Socket_Type;
list : Void -> List(((String , Socket_Type)) );
to_string : Socket_Type -> String;
from_string : String -> Null_Or(Socket_Type );
};;
package control : api {
get_debug : Socket((X, Y) ) -> Bool;
set_debug : (Socket((X, Y) ) , Bool) -> Void;
get_reuseaddr : Socket((X, Y) ) -> Bool;
set_reuseaddr : (Socket((X, Y) ) , Bool) -> Void;
get_keepalive : Socket((X, Y) ) -> Bool;
set_keepalive : (Socket((X, Y) ) , Bool) -> Void;
get_dontroute : Socket((X, Y) ) -> Bool;
set_dontroute : (Socket((X, Y) ) , Bool) -> Void;
get_linger : Socket((X, Y) ) -> Null_Or(time::Time );
set_linger : (Socket((X, Y) ) , Null_Or(time::Time )) -> Void;
get_broadcast : Socket((X, Y) ) -> Bool;
set_broadcast : (Socket((X, Y) ) , Bool) -> Void;
get_oobinline : Socket((X, Y) ) -> Bool;
set_oobinline : (Socket((X, Y) ) , Bool) -> Void;
get_sndbuf : Socket((X, Y) ) -> Int;
set_sndbuf : (Socket((X, Y) ) , Int) -> Void;
get_rcvbuf : Socket((X, Y) ) -> Int;
set_rcvbuf : (Socket((X, Y) ) , Int) -> Void;
get_type : Socket((X, Y) ) -> socket::Socket_Type;
get_error : Socket((X, Y) ) -> Bool;
get_peer_name : Socket((Y, X) ) -> Socket_Address(Y );
get_sock_name : Socket((Y, X) ) -> Socket_Address(Y );
get_nread : Socket((X, Y) ) -> Int;
get_atmark : Socket((X, Stream(Active )) ) -> Bool;
};;
same_address : (Socket_Address(X ) , Socket_Address(X )) -> Bool;
family_of_address : Socket_Address(X ) -> af::Address_Family;
bind : (Socket((Y, X) ) , Socket_Address(Y )) -> Void;
listen : (Socket((X, Stream(Passive )) ) , Int) -> Void;
accept : Socket((X, Stream(Passive )) )
-> (Socket((X, Stream(Active )) ) , Socket_Address(X ));
connect : (Socket((Y, X) ) , Socket_Address(Y )) -> Void;
close : Socket((X, Y) ) -> Void;
Shutdown_Mode = NO_RECVS | NO_RECVS_OR_SENDS | NO_SENDS;
shutdown : (Socket((X, Stream(Y )) ) , Shutdown_Mode) -> Void;
Socket_Descriptor ;
socket_descriptor : Socket((X, Y) ) -> Socket_Descriptor;
same_descriptor : (Socket_Descriptor , Socket_Descriptor) -> Bool;
wait_for_io_opportunity : {oobdable:List(Socket_Descriptor ),
readable:List(Socket_Descriptor ),
timeout:Null_Or(time::Time ),
writable:List(Socket_Descriptor )}
-> {oobdable:List(Socket_Descriptor ),
readable:List(Socket_Descriptor ),
writable:List(Socket_Descriptor )};
select : {oobdable:List(Socket_Descriptor ),
readable:List(Socket_Descriptor ),
timeout:Null_Or(time::Time ),
writable:List(Socket_Descriptor )}
-> {oobdable:List(Socket_Descriptor ),
readable:List(Socket_Descriptor ),
writable:List(Socket_Descriptor )};
io_descriptor : Socket((X, Y) ) -> Int;
Out_Flags = {don't_route:Bool, oob:Bool};
In_Flags = {oob:Bool, peek:Bool};
send_vector : (Socket((X, Stream(Active )) )
, vector_slice_of_one_byte_unts::Slice)
-> Int;
send_rw_vector : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Int;
send_vector' : (Socket((X, Stream(Active )) )
, vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Int;
send_rw_vector' : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Int;
send_vector_to : (Socket((X, Datagram) ) , Socket_Address(X )
, vector_slice_of_one_byte_unts::Slice)
-> Void;
send_rw_vector_to : (Socket((X, Datagram) ) , Socket_Address(X )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Void;
send_vector_to' : (Socket((X, Datagram) ) , Socket_Address(X )
, vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Void;
send_rw_vector_to' : (Socket((X, Datagram) ) , Socket_Address(X )
, rw_vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Void;
receive_vector : (Socket((X, Stream(Active )) ) , Int)
-> vector_of_one_byte_unts::Vector;
receive_rw_vector : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Int;
receive_vector' : (Socket((X, Stream(Active )) ) , Int , In_Flags)
-> vector_of_one_byte_unts::Vector;
receive_rw_vector' : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice , In_Flags)
-> Int;
receive_vector_from : (Socket((X, Datagram) ) , Int)
-> (vector_of_one_byte_unts::Vector , Socket_Address(Y ));
receive_rw_vector_from : (Socket((X, Datagram) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> (Int , Socket_Address(X ));
receive_vector_from' : (Socket((X, Datagram) ) , Int , In_Flags)
-> (vector_of_one_byte_unts::Vector , Socket_Address(Y ));
receive_rw_vector_from' : (Socket((X, Datagram) )
, rw_vector_slice_of_one_byte_unts::Slice , In_Flags)
-> (Int , Socket_Address(X ));
accept_nonblocking : Socket((X, Stream(Passive )) )
-> Null_Or(
((Socket((X, Stream(Active )) ) , Socket_Address(X )))
);
connect_nonblocking : (Socket((Y, X) ) , Socket_Address(Y )) -> Bool;
send_vector_nonblocking : (Socket((X, Stream(Active )) )
, vector_slice_of_one_byte_unts::Slice)
-> Null_Or(Int );
send_rw_vector_nonblocking : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Null_Or(Int );
send_vector_nonblocking' : (Socket((X, Stream(Active )) )
, vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Null_Or(Int );
send_rw_vector_nonblocking' : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Null_Or(Int );
send_vector_to_nonblocking : (Socket((X, Datagram) ) , Socket_Address(X )
, vector_slice_of_one_byte_unts::Slice)
-> Bool;
send_rw_vector_to_nonblocking : (Socket((X, Datagram) ) , Socket_Address(X )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Bool;
send_vector_to_nonblocking' : (Socket((X, Datagram) ) , Socket_Address(X )
, vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Bool;
send_rw_vector_to_nonblocking' : (Socket((X, Datagram) ) , Socket_Address(X )
, rw_vector_slice_of_one_byte_unts::Slice , Out_Flags)
-> Bool;
receive_vector_nonblocking : (Socket((X, Stream(Active )) ) , Int)
-> Null_Or(vector_of_one_byte_unts::Vector );
receive_rw_vector_nonblocking : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Null_Or(Int );
receive_vector_nonblocking' : (Socket((X, Stream(Active )) ) , Int , In_Flags)
-> Null_Or(vector_of_one_byte_unts::Vector );
receive_rw_vector_nonblocking' : (Socket((X, Stream(Active )) )
, rw_vector_slice_of_one_byte_unts::Slice , In_Flags)
-> Null_Or(Int );
receive_vector_from_nonblocking : (Socket((X, Datagram) ) , Int)
-> Null_Or(
((vector_of_one_byte_unts::Vector , Socket_Address(Y )))
);
receive_rw_vector_from_nonblocking : (Socket((X, Datagram) )
, rw_vector_slice_of_one_byte_unts::Slice)
-> Null_Or(((Int , Socket_Address(X ))) );
receive_vector_from_nonblocking' : (Socket((X, Datagram) ) , Int , In_Flags)
-> Null_Or(
((vector_of_one_byte_unts::Vector , Socket_Address(Y )))
);
receive_rw_vector_from_nonblocking' : (Socket((X, Datagram) )
, rw_vector_slice_of_one_byte_unts::Slice , In_Flags)
-> Null_Or(((Int , Socket_Address(X ))) );
};


