On Tue, Jan 5, 2010 at 8:27 AM, Nicola Michael Gutberlet <nicola.gutberlet@hhi.fraunhofer.de> wrote:
Dear all,

Thank you for your replies. I wanted to tell you the error message thrown
when trying to send larger packages but it seems to be solved. I don't know
why or how...

Anyway, it is sensible to check the maximum message size for the
socket/OS/whatever. How do I get the information of the maximum size of
messages I can write/read over my TCP socket? I noticed the option mentioned
by Jason Felice "SO_MAX_MSG_SIZE" but the TCP socket doesn't support it. I
tried to use an own template:

boost::asio::detail::socket_option::integer<SOL_SOCKET, SO_MAX_MSG_SIZE>
cOptionMaxMessageSize;
socket->get_option( cOptionMaxMessageSize );

But this also did not work - resulting in the option value -1.


Hi Nicola,
Note that in the code you posted, you wrote the option as "SOL_SOCKET, SO_MAX_MSG_SIZE". You have an extra "L" there which might be causing your value -1. Also, remember that as stated before, this option goes for microsoft windows. There is no maximum size you can send through a socket, although there is a MTU(Maximum Transfer Unity) and you should read more about it if you are not familiarized with that concept. As said before, TCP being a stream protocol, you have to ensure in a way or another (by putting the size in front of data, or using an "END OF STREAM" mark) that your read get all the bytes you expect.

Hope that helps!
 
Best regards,
Nicola

-----Original Message-----
From: boost-users-bounces@lists.boost.org
[mailto:boost-users-bounces@lists.boost.org] On Behalf Of Oliver Seiler
Sent: 04 January 2010 18:05
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] [asio] Sending large packages

On Mon, Jan 4, 2010 at 7:30 AM, Jason Felice <jason.m.felice@gmail.com>
wrote:
> On Mon, Jan 4, 2010 at 5:41 AM, Igor R <boost.lists@gmail.com> wrote:
>>> Doesn’t anyone have any ideas? Did anyone receive this mail?
>>
>> I guess it's not an asio limitation, but the OS one - you just
>> exceeded the maximum message size for the underlying protocol.
>> On windows you can use SO_MAX_MSG_SIZE socket option to get the maximum
size.
>
> [...] All TCP networks
> have an MTU, and packets larger than this will be sliced up for
> delivery (without affecting the data contained within or the
> guaranteed order of delivery).

And herein lies what the original poster is hitting. The MTU is way
smaller than the ~1MB limit the poster sees, so that isn't likely the
problem (and would typically only be an issue if using UDP).

My guess is the TCP read/write buffers have been exceeded. Original
poster should include more information:
- OS that this is on,
- The actual error codes being encountered.

If you're exceeding the TCP buffer sizes and trying to write in one
chunk, you may be hitting an error like ENOBUFS (no_buffer_space in
boost:error_code). Just a guess though.
_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users

_______________________________________________
Boost-users mailing list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users



--
Matheus Araújo Aguiar
Computer Scientist
matheus.pit@gmail.com