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=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,8bbf2dbc48e08e2f X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news3.google.com!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!npeer.de.kpn-eurorings.net!newsfeed.arcor.de!news.arcor.de!not-for-mail From: "Dmitry A. Kazakov" Subject: Re: Question about Streams and UDP sockets using GNAT.Sockets Newsgroups: comp.lang.ada User-Agent: 40tude_Dialog/2.0.15.1 MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Reply-To: mailbox@dmitry-kazakov.de Organization: cbb software GmbH References: <1153215666.455584.201990@m73g2000cwd.googlegroups.com> Date: Tue, 18 Jul 2006 11:55:13 +0200 Message-ID: <1fpj192j49rf4$.ma23qkoukku3.dlg@40tude.net> NNTP-Posting-Date: 18 Jul 2006 11:55:13 MEST NNTP-Posting-Host: 4871b77b.newsread2.arcor-online.net X-Trace: DXC=Znc?Yh`:P]FVg>C^g8i1FIQ5U85hF6f;DjW\KbG]kaMHGSi?jHD8GO@8a0O X-Complaints-To: usenet-abuse@arcor.de Xref: g2news2.google.com comp.lang.ada:5754 Date: 2006-07-18T11:55:13+02:00 List-Id: On 18 Jul 2006 02:41:06 -0700, lekktu@gmail.com wrote: > I'm using GNAT GPL 2006 (20060522-34) on Windows XP. > > I'm trying to broadcast an UDP packet, with the following test code: > > ---------------------------------------------------------------------- > with GNAT.Sockets; use GNAT.Sockets; > procedure Test is > Local_Port : constant Port_Type := 20769; > Remote_Port : constant Port_Type := 20770; > Address : Sock_Addr_Type; > Socket : Socket_Type; > Channel : Stream_Access; > Local_Host : String := "127.0.0.1"; > begin > Initialize; > Create_Socket (Socket, Family_Inet, Socket_Datagram); > Set_Socket_Option (Socket, Socket_Level, (Broadcast, True)); > Address.Addr := Inet_Addr (Local_Host); > Address.Port := Local_Port; > Bind_Socket (Socket, Address); > Address.Addr := Broadcast_Inet_Addr; > Address.Port := Remote_Port; > Channel := Stream (Socket, Address); > String'Write (Channel, "TEST"); -- sends "T", "E", "S", "T". > Free (Channel); > Close_Socket (Socket); > Finalize; > end Test; > ---------------------------------------------------------------------- > > The trouble I'm having is not about sockets, but the streams vs. > sockets interaction. The above code does not send one UDP packet, but > four, one for each byte of the test message. What I'm doing wrong? Don't use String'Write. GNAT implementation treats strings as array so characters don't coalesce. It is unexpected, but legal. You might wish to define your own type of the packet and implement a suitable write (and read) for it. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de