[Ace-users] Re: Socket error 0 on send_n with ace Reactor
ron.grosberg at gmail.com
Sun Jul 8 10:38:48 CDT 2007
On Jul 8, 3:22 pm, Ron Grosberg <ron.grosb... at gmail.com> wrote:
> I am working with ACE reactor and ACE_SOCK_Stream. normally everything
> works fine.
> we have one scenario, in which we are working with 2 application, 2
> sockets each - one inside the server (sunos 10), and one outside of
> the first running application works fine, but the second one cannot
> send data through the socket. the return value is 0 (0 bytes sent),
> and errno=0. we tried to do several things:
> 1. replace the ace send_n with a regular send. didn't work
> 2. getsockopt(fd, SOL_SOCKET, SO_ERROR, (char *)&value, &val_len ) -
> to receive the error. got error 0 again....
> 3. getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char *)&value, &val_len ) to
> receive the maximum size we can send. when the socket works fine, this
> works, but after the first send error we get errno 34 - "Result too
> large", which i haven't found documentation for anywhere...
> 4. Resending the data in a loop, we still get error 0, and nothing is
> anyone has any IDEA?
OK, Found the problem. after replacing the send_n with a regular send
(not ace) I got error 11 - resource temporarily unavailable. after
some reading - it seems that solaris SunOs 5.10 has problems with the
new TCP Fusion mechanism, and that's what did the problem. I disabled
the TCP Fusion, and everything worked like magic.
as Sun said:
To work around the described issue until patches can be installed,
disable TCP Fusion by adding the following line to the "/etc/system"
file and rebooting the system:
set ip:do_tcp_fusion = 0x0
(taken from http://sunsolve.sun.com/search/document.do?assetkey=1-26-102667-1)
More information about the Ace-users