On Thu, 26 Oct 2000, James Cameron wrote:
> 
> Looking at the select() call, I see that status isn't being checked.
> 
> It is quite possible that it is returning an error, and the surrounding
> code is checking for a packet and not finding any ready, and so looping
> back to wait again.
> 
> Before I start adding to the code at this point; any ideas?


You can cause this to happen by connecting to the netrek port with telnet, and
then disconnecting (push control ] then type close).  The ntserv will jump to
100% CPU until the 30 second timeout expires.

The problem isn't with socketPause(), but the the code that is calling it. 
The code in main.c:152 is basically a tight loop calling socketPause() and
then readFromClient(), while it waits up to 30 seconds for a version packet to
be received.  If the client disconnects, it will be discovered during the
readFromClient() call and clientDead will be set. 

The loop in main.c doesn't check for clientDead, and will keep trying to read
from a dead socket.

If you set ERROR_LEVEL to 9 in your sysdef, you'll get an error in your log,
like 'Q?: read() failed, Success', which makes it obvious what is wrong.