From: Roc Ho Date: 2008-07-03T18:43:05+09:00 Subject: Re: Detecting a connection loss && other network questions 1) you can check the recv msg if msg==nil 2) maybe the send msg must add "\0" at end "David Leal" 写入邮件新闻:<928198f16881d4e14cef239836a9b3d1@ruby-forum.com>... > Hello all, > > I'm trying to get acquainted with network programming in Ruby and I'm > facing several problems. The biggest 2 are > > 1) How do I detect a connection loss when it happens while the client is > blocking, waiting for data? According to Stevens, most tcp > implementations time out after 11 minutes, but I disconnected my cable > and waited long after that--nothing. Is this my fault? Is it a ruby > problem? > > 2) The client (an IRC bot) seems to be stuck sometimes. Suddenly, input > stops, it stops logging data, everything stops. This happens on a > particular IRC server (heinlein.freenode.net) in the middle of the MOTD, > but happened a few days ago on another server during normal usage. The > code I'm using is > > buffer = @socket.recvfrom(512).first > messages = buffer.split /\n/ > > @messages.last << messages.shift \ > if @messages.last && @messages.last[-1] != ?\r > > @messages += messages > > An interesting twist is that this doesn't happen on heinlein upon > connection if I print the contents of the array I get from recvfrom. > Seems to be some kind of flushing problem, but I don't know enough about > it to be sure. > > Any ideas? > > Cheers, > > David > -- > Posted via http://www.ruby-forum.com/. >