1. -- 
  2. -- Uwe R. Zimmer, Australia 2015 
  3. -- 
  4.  
  5. package body Neat_Sockets is 
  6.  
  7.    ---------------------- 
  8.    -- Open_Server_Port -- 
  9.    ---------------------- 
  10.  
  11.    function Open_Server_Port (Port        : Port_Type; 
  12.                               Server_Addr : Inet_Addr_Type := Addresses (Get_Host_By_Name (Host_Name))) return Socket_Type is 
  13.  
  14.       Socket : Socket_Type; 
  15.  
  16.    begin 
  17.       Create_Socket (Socket); 
  18.       Set_Socket_Option (Socket, Socket_Level, (Reuse_Address, True)); 
  19.       Bind_Socket (Socket, (Family => Family_Inet, 
  20.                             Addr   => Server_Addr, 
  21.                             Port   => Port)); 
  22.       Listen_Socket (Socket); 
  23.       return Socket; 
  24.    end Open_Server_Port; 
  25.  
  26.    ----------------------- 
  27.    -- Accept_Connection -- 
  28.    ----------------------- 
  29.  
  30.    function Accept_Connection 
  31.      (Server_Socket  :     Socket_Type; 
  32.       Connection_Socket  : out Socket_Type; 
  33.       Connection_Address : out Sock_Addr_Type) 
  34.       return Stream_Access is 
  35.  
  36.    begin 
  37.       Accept_Socket (Server_Socket, Connection_Socket, Connection_Address); 
  38.       return Stream (Connection_Socket); 
  39.    end Accept_Connection; 
  40.  
  41.    ------------- 
  42.    -- Connect -- 
  43.    ------------- 
  44.  
  45.    function Connect (Server_Addr        :     Inet_Addr_Type; 
  46.                      Port               :     Port_Type; 
  47.                      Connection_Socket  : out Socket_Type) return Stream_Access is 
  48.  
  49.    begin 
  50.       loop 
  51.          begin 
  52.             Create_Socket (Connection_Socket); 
  53.             Connect_Socket (Connection_Socket, (Family => Family_Inet, 
  54.                                                 Addr   => Server_Addr, 
  55.                                                 Port   => Port)); 
  56.             return Stream (Connection_Socket); 
  57.          exception 
  58.             when Socket_Error => 
  59.                Close_Socket (Connection_Socket); 
  60.                delay 0.1; 
  61.          end; 
  62.       end loop; 
  63.    end Connect; 
  64.  
  65.    ---------------------- 
  66.    -- Close_Connection -- 
  67.    ---------------------- 
  68.  
  69.    procedure Close_Connection (Connection_Socket : Socket_Type) is 
  70.  
  71.    begin 
  72.       Close_Socket (Connection_Socket); 
  73.    end Close_Connection; 
  74.  
  75.    ------------------ 
  76.    -- Close_Server -- 
  77.    ------------------ 
  78.  
  79.    procedure Close_Server (Server_Socket : Socket_Type) is 
  80.  
  81.    begin 
  82.       Close_Socket (Server_Socket); 
  83.    end Close_Server; 
  84.  
  85. end Neat_Sockets;