From: Yohanes Santoso Date: 2005-12-26T17:20:27+09:00 Subject: Re: TCPSocket Connection "bbryant@gmail.com" writes: > I am working on a network application on an unstable network. I need to > do something like call client.connected?() on the server side to see if > the clients are still connected before I try to write to them. Any > ideas? If the network is unstable, that means there could be instances where a connection is disconnected improperly. This means, either end may not know that the other has gone away. There is no heart beat in TCP protocol (there actually is: the keep alive packet, but 1. you can't rely on that being enabled by the other side, 2. the default interval is 2 hours, way too long for most apps), so you can't readily be informed of any disruption. The only way to see if the other side has gone away is to try to perform IO on the connection. In the case of writing, you'll get an exception if the other side has gone away. In the case of reading, if the connection was closed amicably, you'll get an end-of-stream (0-byte read), otherwise, it may just block indefinitely. Therefore, it is of utmost importance to always set some timeout when trying to read because you can never know if the connection has became invalid. In ruby, you can simply use the timeout library (require 'timeout'). YS.