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 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED.fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Ada x Datagram Sockets Date: Thu, 7 Feb 2019 09:28:34 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <47f17695-f9a5-4024-b2da-3f13209dc4fd@googlegroups.com> <818f5ff4-f18d-42b8-950d-9b597c012aa4@googlegroups.com> <62406dfb-54c9-4db3-b461-0ad72d4a782c@googlegroups.com> NNTP-Posting-Host: fn3LatRFkm9/xzEj7F2/NQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.9.2 Xref: reader01.eternal-september.org comp.lang.ada:55454 Date: 2019-02-07T09:28:34+01:00 List-Id: On 2019-02-07 07:41, Rego, P. wrote: > This is quite controversial, in this case. I'd usually agree with you, however the use of Ada stream is not by choice. The whole GNAT Ada package uses Ada streams, and actually the above code was entirely extracted from the comments from g-sockets.ads with minimum modification. I don't think it would be wise to re-implement Ada Sockets pkg to be more efficient. Well, using streams directly with UDP is calling for trouble (and highly non-portable too). You should probably never use streams with TCP either. Certainly not if socket options like NO_DELAY are planned. Streams will never ever work with non-blocking sockets, obviously. (There are other concerns with stream attributes beyond performance that however do not apply to strings) Anyway, the way to do it is to have an outgoing packet buffer of Stream_Element_Array. You put data there and then send all buffer to the socket (write to the file etc), in one piece. If you want to use streams. Put a memory-mapped stream on top of the Stream_Element_Array. Write packet whole. Flush the buffer contents to the socket/file. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de