This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] ada/9535: Do not loop when writing/reading on datagram socket
On 16/04, Laurent GUERBY wrote:
| > + Send_Socket
| > + (Stream.Socket,
| > + Item,
| > + Last,
| > + Stream.To);
[...]
| > + if Last /= Item'Last then
| > raise Socket_Error;
| > end if;
|
| IIRC the data payload of an UDP datagram can be zero (to be checked I
| might be wrong), in this case Send_Socket will set Last to Item'First
| and the "if" above will erroneously raise Socket_Error because Last =
| Item'First /= Item'Last by construction of empty array bounds in Ada.
|
| Might be a thing to try out as there might be similar handling
| of zero elsewhere.
I don't think so: in "Send_Socket", "Last" is set to
Item'First + Ada.Streams.Stream_Element_Offset (Res - 1);
where "Res" is the number of bytes sent; this will correctly give
"Item'First - 1" if an empty payload has been succesfully sent.
Where did you see that "Send_Socket" would set "Last" to "Item'First"?