- From: Jens Meggers <jens@meggers.com>
- Date: Fri, 4 Aug 2000 16:59:12 +0200
- To: <www-lib@w3.org>
- Message-ID: <001401bffe24$8dd70520$1002a8c0@pille>
Hi,
sorry for being just a few hours too late for the last release, but think that I found a bug in HTTCP.c:
When requesting for an URL to a host that exists, but has not service running, the request is not finished in non-blocking mode. This causes the event loop not to return and requests hang.
Try fro example the url http://127.0.0.1:8797
When HTDoConnect() enters the state TCP_NEED_CONNECT, it starts connect(). On Win32, the results is always WSA_WOULDBLOCK because the TCP connection is not initiated immediatly. The event system simply calls that code portion again after receiving a FD_CONNECT event. Thus, the conenct() is called again and again, always returning WSA_WOULDBLOCK. It seems that the retry-counter of HTHost.c provides the right solution to stop connection retries after some time, however the counter seems not to be used and is not set up.
I fixed the problem by setting a default value for the retry counter in HTHost_new():
if (pres) pres->retry = 3;
return pres;
}
and changed the beginning of TCP_NEED_CONNECT part of HTDoConnect() to
case TCP_NEED_CONNECT:
// for each connection attempt, decrease the retry value
HTHost_decreaseRetry (host);
if (!HTHost_retry(host)) {
host->tcpstate = TCP_ERROR;
break;
}
#ifdef WWW_WIN_ASYNC
HTHost_register(host, net, HTEvent_CONNECT);
#endif
I'm not sure how this is realted with non-blocking mode on Unix. I guess that the problem is the same when connect() returns EINPROGRESS.
Regards,
Jens
Received on Friday, 4 August 2000 11:00:27 UTC