package body Neat_Sockets is
function Open_Server_Port (Port : Port_Type;
Server_Addr : Inet_Addr_Type := Addresses (Get_Host_By_Name (Host_Name))) return Socket_Type is
Socket : Socket_Type;
begin
Create_Socket (Socket);
Set_Socket_Option (Socket, Socket_Level, (Reuse_Address, True));
Bind_Socket (Socket, (Family => Family_Inet,
Addr => Server_Addr,
Port => Port));
Listen_Socket (Socket);
return Socket;
end Open_Server_Port;
function Accept_Connection
(Server_Socket : Socket_Type;
Connection_Socket : out Socket_Type;
Connection_Address : out Sock_Addr_Type)
return Stream_Access is
begin
Accept_Socket (Server_Socket, Connection_Socket, Connection_Address);
return Stream (Connection_Socket);
end Accept_Connection;
function Connect (Server_Addr : Inet_Addr_Type;
Port : Port_Type;
Connection_Socket : out Socket_Type) return Stream_Access is
begin
loop
begin
Create_Socket (Connection_Socket);
Connect_Socket (Connection_Socket, (Family => Family_Inet,
Addr => Server_Addr,
Port => Port));
return Stream (Connection_Socket);
exception
when Socket_Error =>
Close_Socket (Connection_Socket);
delay 0.1;
end;
end loop;
end Connect;
procedure Close_Connection (Connection_Socket : Socket_Type) is
begin
Close_Socket (Connection_Socket);
end Close_Connection;
procedure Close_Server (Server_Socket : Socket_Type) is
begin
Close_Socket (Server_Socket);
end Close_Server;
end Neat_Sockets;