Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: Socket programming

by SuicideJunkie (Vicar)
on Nov 12, 2008 at 15:34 UTC ( #723192=note: print w/replies, xml ) Need Help??

in reply to Socket programming

Please try to edit your posts to add/correct things instead of making new ones with the same question.

It is definitely possible to have sockets die without notice, such that the while loop won't exit. I suffered that when I wrote a telnet-based multiplayer market trading game.

What I did was to select from the current connections, and carefully read a byte at a time.
Once there is enough to act on, I call whatever functions need calling. (If not, buffer the input so far, and loop back to the select)

If one of the connections dies silently and unexpectedly, the select won't pick it to read from since there is no more input to read. After a few minutes of no activity, the dead/timed-out connections can be closed.

Replies are listed 'Best First'.
Re^2: Socket programming
by Illuminatus (Curate) on Nov 12, 2008 at 16:11 UTC
    If the connection is via a WAN or the Internet, then what you are describing can occur. Within a local network, it is much less likely. This is a TCP socket. When either side receives a FIN, the result in the application is an EOF. When a process dies, in almost all instances, open sockets are closed by the OS, resulting in a FIN going to the remote side. On a LAN, the receipt of this is almost certain. On a WAN, intervening equipment/hops can cause packet or session loss.
      Indeed it is a rare occurrence, but in a single-threaded server, one eternal wait event is all that is required to take the system down.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://723192]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (4)
As of 2016-09-27 22:25 GMT
Find Nodes?
    Voting Booth?
    Extraterrestrials haven't visited the Earth yet because:

    Results (516 votes). Check out past polls.