I'm Takahiro. From Japan.
I am using pound 2.2 as a front-end to a Ruby on Rails on Fedora6.
Some fellow workers are using low spec pc. Pentium 800MHz.
I made config file like this:
ListenHTTP
Address 0.0.0.0
Port 80
Client 30
.....
Service
.....
My fellow workers accessed web service with Internet Explore 6.x.
Data were canceld during communication using Ajax.
I tracked down with Ethereal.
The connection was closed by server.
In the case of success:
00:00:17 Clint <---(data)<--- Server
00:00:18 Clint --->(ACK)---> Server
00:00:18 Clint --->(FIN,ACK)---> Server
00:00:18 Clint <---(ACK)<--- Server
In the case of failure:
00:00:17 Clint <---(data)<--- Server
00:00:33 Clint --->(ACK)---> Server
00:00:33 Clint <---(lost segment)<--- Server
The client replied within 30 seconds.
Why does communication fail.
I glanced source code, then I tried to changing source.
[[ http.c ]]
401: void * thr_http(void *arg){
.....
.....
432: #ifdef TCP_LINGER2
- 433: n = 5;
+ 433: n = 30;
434: setsockopt(sock, SOL_TCP, TCP_LINGER2, (void *)&n, sizeof(n));
.....
.....
726: #ifdef TCP_LINGER2
- 727: n = 5;
+ 727: n = 30;
728: setsockopt(sock, SOL_TCP, TCP_LINGER2, (void *)&n, sizeof(n));
729: #endif
I steered clear of this problem.
Good Idea?
I hope "n" is set by config.
Example:
[[ http.c ]]
432: #ifdef TCP_LINGER2
433: n = lstn->to;
434: setsockopt(sock, SOL_TCP, TCP_LINGER2, (void *)&n, sizeof(n));
435: #endif
My English is clumsy. Sorry & Thank you for your time.
|