On Mon, 20 Mar 2006 11:56:32 -0800 Skunk Worx <[EMAIL PROTECTED]> wrote:
> Rick Jones wrote: > > > > It _would_ be very interesting to see if disabling tcp_abc does > > workaround the problem. > > > > Yes it does, we tried that first. Then we reenabled tcp_abc and > increased the toolkit keep_alive. Either method works around the issue > from our point of view. > gsoap is fixable. The following has gsoap use cork to avoid sending small buffers. It compiles, but is UNTESTED. Index: gsoap-linux-2.7/stdsoap2.c =================================================================== --- gsoap-linux-2.7.orig/stdsoap2.c 2006-02-19 08:19:11.000000000 -0800 +++ gsoap-linux-2.7/stdsoap2.c 2006-03-20 13:37:06.000000000 -0800 @@ -427,6 +427,10 @@ static int tcp_done = 0; #endif +#ifdef TCP_CORK +static const int tcp_cork_on = 1, tcp_cork_off = 0; +#endif + /******************************************************************************/ #ifndef WITH_NOIO #ifndef PALM_1 @@ -674,7 +678,12 @@ } DBGMSG(SENT, s, n); #endif - return soap->error = soap->fsend(soap, s, n); + soap->error = soap->fsend(soap, s, n); +#ifdef TCP_CORK + setsockopt(soap->sendfd, IPPROTO_TCP, TCP_CORK, (char *)&tcp_cork_off, sizeof(int)); + setsockopt(soap->sendfd, IPPROTO_TCP, TCP_CORK, (char *)&tcp_cork_on, sizeof(int)); +#endif + return soap->error; } #endif @@ -4507,6 +4516,10 @@ #endif #endif #endif +#ifdef TCP_CORK + setsockopt(soap->sendfd, IPPROTO_TCP, TCP_CORK, + (char *)&tcp_cork_on, sizeof(int)); +#endif if (soap->mode & SOAP_IO) { soap->bufidx = 0; soap->buflen = 0; Index: gsoap-linux-2.7/stdsoap2.cpp =================================================================== --- gsoap-linux-2.7.orig/stdsoap2.cpp 2006-02-19 08:19:11.000000000 -0800 +++ gsoap-linux-2.7/stdsoap2.cpp 2006-03-20 13:37:08.000000000 -0800 @@ -427,6 +427,10 @@ static int tcp_done = 0; #endif +#ifdef TCP_CORK +static const int tcp_cork_on = 1, tcp_cork_off = 0; +#endif + /******************************************************************************/ #ifndef WITH_NOIO #ifndef PALM_1 @@ -674,7 +678,12 @@ } DBGMSG(SENT, s, n); #endif - return soap->error = soap->fsend(soap, s, n); + soap->error = soap->fsend(soap, s, n); +#ifdef TCP_CORK + setsockopt(soap->sendfd, PPROTO_TCP, TCP_CORK, (char *)&tcp_cork_off, sizeof(int)); + setsockopt(soap->sendfd, PPROTO_TCP, TCP_CORK, (char *)&tcp_cork_on, sizeof(int)); +#endif + return soap->error; } #endif @@ -4507,6 +4516,10 @@ #endif #endif #endif +#ifdef TCP_CORK + setsockopt(soap->sendfd, IPPROTO_TCP, TCP_CORK, + (char *)&tcp_corkon, sizeof(int)); +#endif if (soap->mode & SOAP_IO) { soap->bufidx = 0; soap->buflen = 0; - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html