40 lines
1.3 KiB
Ada
40 lines
1.3 KiB
Ada
with Ada.Text_IO;
|
|
with Ada.IO_Exceptions;
|
|
with GNAT.Sockets;
|
|
procedure Echo_Server is
|
|
Receiver : GNAT.Sockets.Socket_Type;
|
|
Connection : GNAT.Sockets.Socket_Type;
|
|
Client : GNAT.Sockets.Sock_Addr_Type;
|
|
Channel : GNAT.Sockets.Stream_Access;
|
|
begin
|
|
GNAT.Sockets.Create_Socket (Socket => Receiver);
|
|
GNAT.Sockets.Set_Socket_Option
|
|
(Socket => Receiver,
|
|
Level => GNAT.Sockets.Socket_Level,
|
|
Option => (Name => GNAT.Sockets.Reuse_Address, Enabled => True));
|
|
GNAT.Sockets.Bind_Socket
|
|
(Socket => Receiver,
|
|
Address => (Family => GNAT.Sockets.Family_Inet,
|
|
Addr => GNAT.Sockets.Inet_Addr ("127.0.0.1"),
|
|
Port => 12321));
|
|
GNAT.Sockets.Listen_Socket (Socket => Receiver);
|
|
loop
|
|
GNAT.Sockets.Accept_Socket
|
|
(Server => Receiver,
|
|
Socket => Connection,
|
|
Address => Client);
|
|
Ada.Text_IO.Put_Line
|
|
("Client connected from " & GNAT.Sockets.Image (Client));
|
|
Channel := GNAT.Sockets.Stream (Connection);
|
|
begin
|
|
loop
|
|
Character'Output (Channel, Character'Input (Channel));
|
|
end loop;
|
|
exception
|
|
when Ada.IO_Exceptions.End_Error =>
|
|
null;
|
|
end;
|
|
GNAT.Sockets.Close_Socket (Connection);
|
|
end loop;
|
|
end Echo_Server;
|