- From: Fengyun Cao <fcao@CS.Princeton.EDU>
- Date: Sun, 25 Mar 2001 19:43:03 -0500 (EST)
- To: Jens Meggers <jens.meggers@firepad.com>
- cc: "'www-lib@w3.org'" <www-lib@w3.org>
Cool! I have a question now about connect on unix: in HTDoConnect of HTTCP.c, case tcpstate of TCP_NEED_CONNECT, it only register HTEvent_CONNECT for Windows. So what if it's running on unix under non-preemptive mode? Should it also register HTEvent_WRITE? THanks, Fengyun Meggers wrote: > Hi, > > there is a bug in the procedure EventListTimerHandler() in HTEvtLst.c. > There is missing a handler for the connect timeout. I guess the connenct > timeout is only of use under windows. Without that additional handler code, > the windows event based system stucks from time to time. Thus, we should add > it. Please check the code below. I added the code that is labeled /* Check > for connect timeout */. > > Regards, > > Jens > > > /* > ** Event timeout handler > ** If an event didn't occur before the timeout then call it explicitly > ** indicating that it timed out. > */ > PRIVATE int EventListTimerHandler (HTTimer * timer, void * param, > HTEventType type) > { > SockEvents * sockp = (SockEvents *) param; > HTEvent * event = NULL; > int code; > > /* Check for read timeout */ > if (sockp->timeouts[HTEvent_INDEX(HTEvent_READ)] == timer) { > event = sockp->events[HTEvent_INDEX(HTEvent_READ)]; > HTTRACE(THD_TRACE, "Event....... READ timed out on %d.\n" _ > sockp->s); > return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); > } > > /* Check for write timeout */ > if (sockp->timeouts[HTEvent_INDEX(HTEvent_WRITE)] == timer) { > event = sockp->events[HTEvent_INDEX(HTEvent_WRITE)]; > HTTRACE(THD_TRACE, "Event....... WRITE timed out on %d.\n" _ > sockp->s); > return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); > } > > /* Check for connect timeout */ > if (sockp->timeouts[HTEvent_INDEX(HTEvent_CONNECT)] == timer) { > event = sockp->events[HTEvent_INDEX(HTEvent_CONNECT)]; > HTTRACE(THD_TRACE, "Event....... CONNECT timed out on %d.\n" _ > sockp->s); > printf("Connect timed out!\n"); > code = (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); > > // delete event > HTEventList_unregister (sockp->s, HTEvent_CONNECT); > > return code; > } > > /* Check for out-of-band data timeout */ > if (sockp->timeouts[HTEvent_INDEX(HTEvent_OOB)] == timer) { > event = sockp->events[HTEvent_INDEX(HTEvent_OOB)]; > HTTRACE(THD_TRACE, "Event....... OOB timed out on %d.\n" _ > sockp->s); > return (*event->cbf) (sockp->s, event->param, HTEvent_TIMEOUT); > } > HTTRACE(THD_TRACE, "Event....... No event for timer %p with context > %p\n" _ timer _ param); > return HT_ERROR; > } > > > ;--------------------------------------------------------------------- > Jens Meggers > Director of Engineering > > Firepad, Inc. > The Firepad Building > 625 Ellis Street > Mountain View, California 94043-2225 > Telephone (650) 237-3265 > Facsimile (650) 237-3299 > ;--------------------------------------------------------------------- > > > -- **************************************************** Fengyun Cao Computer Science Department Princeton University email: fcao@cs.princeton.edu tel: (609)-258-6126 ****************************************************
Received on Sunday, 25 March 2001 19:43:13 UTC