On Wed, 07 Mar 2012 17:29:25 -0000, Pedro Lacerda <pslace...@gmail.com> wrote:
2012/3/7 Pedro Lacerda <pslace...@gmail.com>

Hi all,

I'm trying to handle disconnections transparently on SocketStream. I
thought something like this:

void send(ubyte[] buffer) in { assert(buffer.length > 0); }
body {
    if (!stream.isAlive) connect();
    auto sent = stream.write(buffer);
    if (sent == 0)
        throw new Exception("Error while writing");
}

But that's impossible because isAlive doesn't exists for SocketStream and
I can't get the underlying socket object. Is that something missing or
should I handle it differently?

The underlying problem is that you cannot detect if a socket is still connected without trying to read (recv) or write (send) to it, it is only once you attempt an operation that it will report that it has been closed. This is why isAlive wont/can't exist in any really useful way. The underlying socket routines indicate closure by returning 0 bytes read/written. So, the real Q here is how does socketstream (is it built on std.socket?) reflect this information to you?

Regan

--
Using Opera's revolutionary email client: http://www.opera.com/mail/

Reply via email to