[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Handling network disconnects during read
From: |
Nikos Mavrogiannopoulos |
Subject: |
Re: Handling network disconnects during read |
Date: |
Sat, 10 Oct 2009 11:01:24 +0300 |
User-agent: |
Thunderbird 2.0.0.23 (X11/20090817) |
Michael Welsh Duggan wrote:
> I've been encountering a problem using gnutls_record_recv() using old
> versions of gnutls, and I want to find out if a) current versions are
> not subject to this problem, or b) there is a decent workaround to this
> problem that I have not considered. The version of gnutls that I am
> currently constrained to work with is v1.4.1.
> I am reading data using gnutls_record_recv(). I am using select() to
> determine whether there is data available on that socket before calling
> gnutls_record_recv(). Internally, gnutls_record_recv() appears to be
> doing multiple recv calls until "enough" data is read. If a network
> disconnect happens in between recv calls in such a way that the os
> cannot determine that the connection is disconnected, then the recv
> call blocks. This currently hangs my software.
Hello,
Unfortunately this problem cannot be solved unless you use non blocking
sockets. The usage of select() with gnutls functions has this
side-effect since select only tells if there are data in the socket, not
if they are enough for a gnutls read.
> I have a potential workaround I am looking at involving writing my own
> pull function, but I am not particularly happy with it. Any
> suggestions?
If you want to stick on blocking sockets this is the "correct" solution.
regards,
Nikos