From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=unavailable autolearn_force=no version=3.4.4 X-Received: by 2002:a24:99c4:: with SMTP id a187-v6mr7696365ite.11.1521950678419; Sat, 24 Mar 2018 21:04:38 -0700 (PDT) X-Received: by 2002:a9d:528c:: with SMTP id f12-v6mr2001800oth.10.1521950678135; Sat, 24 Mar 2018 21:04:38 -0700 (PDT) Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!feed.usenet.farm!feeder4.feed.usenet.farm!weretis.net!feeder6.news.weretis.net!feeder.usenetexpress.com!feeder-in1.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!199-v6no2418806itl.0!news-out.google.com!j10-v6ni2673ite.0!nntp.google.com!199-v6no2418801itl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Sat, 24 Mar 2018 21:04:37 -0700 (PDT) Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=2601:18f:900:f900:6600:6aff:fe37:6bdc; posting-account=3pYsyQoAAACcI-ym7XtMOI2PDU8gRZS5 NNTP-Posting-Host: 2601:18f:900:f900:6600:6aff:fe37:6bdc User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <64541efa-41ea-464b-bb60-06719f3c56ad@googlegroups.com> Subject: TCP Server & Client From: Andrew Shvets Injection-Date: Sun, 25 Mar 2018 04:04:38 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader02.eternal-september.org comp.lang.ada:51195 Date: 2018-03-24T21:04:37-07:00 List-Id: Hello, I'm trying to write a small client/server example: This is the client: ============================================================================== with Ada.Streams; with Ada.Text_IO; with GNAT.Sockets; procedure TCP_Client is Address : GNAT.Sockets.Sock_Addr_Type; Socket : GNAT.Sockets.Socket_Type; Data : constant Ada.Streams.Stream_Element_Array(1 .. 512) := (others => 42); Last : Ada.Streams.Stream_Element_Offset; begin GNAT.Sockets.Initialize; Address.Port := 50001; Address.Addr := GNAT.Sockets.Inet_Addr("127.0.0.1"); Ada.Text_IO.Put_Line("Hello 1"); GNAT.Sockets.Create_Socket(Socket, GNAT.Sockets.Family_Inet, GNAT.Sockets.Socket_Stream); Ada.Text_IO.Put_Line("Hello 2"); GNAT.Sockets.Set_Socket_Option(Socket, GNAT.Sockets.Socket_Level, (GNAT.Sockets.Reuse_Address, True)); Ada.Text_IO.Put_Line("Hello 3"); GNAT.Sockets.Send_Socket(Socket, Data, Last, Address); Ada.Text_IO.Put_Line("last :" & Last'Img); GNAT.Sockets.Finalize; end TCP_Client; ============================================================================== This is the server: ============================================================================== with Ada.Streams; with Ada.Text_IO; with GNAT.Sockets; procedure TCP_Server is Server : GNAT.Sockets.Socket_Type; Sock : GNAT.Sockets.Socket_Type; Address : GNAT.Sockets.Sock_Addr_Type; From : GNAT.Sockets.Sock_Addr_Type; Data : Ada.Streams.Stream_Element_Array(1 .. 512); Last : Ada.Streams.Stream_Element_Offset; Watchdog : Natural := 0; begin GNAT.Sockets.Initialize; GNAT.Sockets.Create_Socket(Server, GNAT.Sockets.Family_Inet, GNAT.Sockets.Socket_Stream); GNAT.Sockets.Set_Socket_Option(Server, GNAT.Sockets.Socket_Level, (GNAT.Sockets.Reuse_Address, True)); Address.Addr := GNAT.Sockets.Any_Inet_Addr; Address.Port := 50001; GNAT.Sockets.Bind_Socket(Server, Address); loop begin GNAT.Sockets.Listen_Socket(Server); GNAT.Sockets.Accept_Socket(Server, Sock, Address); GNAT.Sockets.Receive_Socket(Server, Data, Last, From); Ada.Text_IO.Put_Line("last : " & Last'Img); Ada.Text_IO.Put_Line("from : " & GNAT.Sockets.Image(From.Addr)); exception when GNAT.Sockets.Socket_Error => Ada.Text_IO.Put_Line("ERROR: Socket error caught."); end; end loop; end TCP_Server; ============================================================================== When I run the client, this is what I see: Hello 1 Hello 2 Hello 3 raised GNAT.SOCKETS.SOCKET_ERROR : [32] Broken pipe Why is this happening? If possible, I'd like to use the Send_Socket method in the client. Thanks.