|
Boost Users : |
Subject: Re: [Boost-users] [asio] Sending large packages
From: Matheus Araújo Aguiar (matheus.pit_at_[hidden])
Date: 2010-01-05 05:55:18
On Tue, Jan 5, 2010 at 8:27 AM, Nicola Michael Gutberlet <
nicola.gutberlet_at_[hidden]> 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 "SO*L*_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_at_[hidden]
> [mailto:boost-users-bounces_at_[hidden]] On Behalf Of Oliver Seiler
> Sent: 04 January 2010 18:05
> To: boost-users_at_[hidden]
> Subject: Re: [Boost-users] [asio] Sending large packages
>
> On Mon, Jan 4, 2010 at 7:30 AM, Jason Felice <jason.m.felice_at_[hidden]>
> wrote:
> > On Mon, Jan 4, 2010 at 5:41 AM, Igor R <boost.lists_at_[hidden]> 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_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
-- Matheus Araújo Aguiar Computer Scientist matheus.pit_at_[hidden]
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net