wlee@ICS.UCI.EDU (Wai-Hung David Lee) (08/11/90)
I am trying to modify the CMU pc ip package to build a smtp server that keeps on looping and accept one connection at a time. The problem I run into is that I execute the client program 4 times and the server responds correctly. On the 5th execution of the client program (therefore, 5th pass in the smtp server loop), the server machine seems to fail to get the 2nd packet from the client (the ACK packet ack'ing the server's SYN & ACK packet during the 3-way handshake), but the client does send it. According to the run-time trace, et_demux() is not awaken by the interrupt handler et_int() and hence et_demux(), the function associated with the task ETDemux, remains block on tk_block() and no upcall is made. I don't understand why et_demux() is awaken properly for the first 4 sessions and also for the 1st packet in the 5th session but it fails afterwards. On each pass, I reuse the packet-related structures (opbi, ophp, ...) and has only allocated them once and I reinitialize the strutures. The code is running on a 386 with a 3com 500 Ethernet card. Any hint or suggestion is greatly apppreciated! Thanks in advance! wlee