1. -- 
  2. -- Uwe R. Zimmer, Australia 2015 
  3. -- 
  4.  
  5. with GNAT.Sockets; use GNAT.Sockets; 
  6.  
  7. package Neat_Sockets is 
  8.  
  9.    ----------------------------------------------------------------------------- 
  10.    -- 
  11.    -- Usage pattern server-side: 
  12.    -- 
  13.    ----------------------------------------------------------------------------- 
  14.    -- 
  15.    --   declare 
  16.    --      Server_Socket : constant Socket_Type := Open_Server_Port (Port => 60043); 
  17.    -- 
  18.    --      Connection_Socket  : Socket_Type; 
  19.    --      Connection_Address : Sock_Addr_Type; 
  20.    -- 
  21.    --      Channel : constant Stream_Access := 
  22.    --        Accept_Connection (Server_Socket, Connection_Socket, Connection_Address); 
  23.    -- 
  24.    --      Message : Message_Type; 
  25.    -- 
  26.    --   begin 
  27.    --         ... 
  28.    --      Message_Type'Read (Channel, Message); 
  29.    --         ... 
  30.    --      Message_Type'Write (Channel, Message); 
  31.    --         ... 
  32.    --      Close_Connection (Connection_Socket); 
  33.    --      Close_Server     (Server_Socket); 
  34.    --   end; 
  35.    -- 
  36.    ----------------------------------------------------------------------------- 
  37.    -- 
  38.    -- Usage pattern client-side: 
  39.    -- 
  40.    ----------------------------------------------------------------------------- 
  41.    -- 
  42.    --     declare 
  43.    --        Connection_Socket : Socket_Type; 
  44.    --        Channel : constant Stream_Access := 
  45.    --          Connect (Server_Addr       => Inet_Addr ("127.0.0.1"), 
  46.    --                   Port              => 60043, 
  47.    --                   Connection_Socket => Connection_Socket); 
  48.    -- 
  49.    --        Message : Message_Type := 42; 
  50.    -- 
  51.    --     begin 
  52.    --           ... 
  53.    --        Message_Type'Write (Channel, Message); 
  54.    --           ... 
  55.    --        Message_Type'Read (Channel, Message); 
  56.    --           ... 
  57.    --        Close_Socket (Connection_Socket); 
  58.    --     end; 
  59.    -- 
  60.    ----------------------------------------------------------------------------- 
  61.  
  62.    function Open_Server_Port  (Port        : Port_Type; 
  63.                                Server_Addr : Inet_Addr_Type := Addresses (Get_Host_By_Name (Host_Name))) 
  64.                                return Socket_Type; 
  65.  
  66.    -- Accept_Connection blocks until a connection attempt is made 
  67.  
  68.    function Accept_Connection (Server_Socket      :     Socket_Type; 
  69.                                Connection_Socket  : out Socket_Type; 
  70.                                Connection_Address : out Sock_Addr_Type) return Stream_Access; 
  71.  
  72.    -- Connect tries to connect to server once every 100 ms until it succeeds 
  73.  
  74.    function Connect           (Server_Addr        :     Inet_Addr_Type; 
  75.                                Port               :     Port_Type; 
  76.                                Connection_Socket  : out Socket_Type)    return Stream_Access; 
  77.  
  78.    procedure Close_Connection (Connection_Socket  :     Socket_Type); 
  79.    procedure Close_Server     (Server_Socket      :     Socket_Type); 
  80.  
  81. end Neat_Sockets;