[Mono-devel-list] Socket Send/ReceiveTimeouts
Matthias Sessler
sessler at in.tum.de
Thu Apr 3 05:17:07 EST 2003
hi
> I'm sorry, is it correct that this code closes the socket
> on send or receive timeout? If so I don't think that's
> right. I believe that on systems that do support setting of
> SO_RCVTIMEO and SO_SNDTIMEO the way to go is obviously to
> employ these options. On systems that do not support these
> I would call select or poll with appropriate timeout just
> before send/recv.
I don't know how other systems work with these settings, but from what
i tested, the ms .net framework closes the socket, after a timeout
appears.
A solution would be to try to set these settings and if a Exception is
thrown, use my code. But this would result in different behaivour on
different mono plattforms which sould at least be documented if not
prohibited.
> Additionally, although I didn't analyze the code carefully
> enough, it looks like it might be a subject to race conditions.
I hope not. These are the scenarios that i considered:
1. Timeout apears while socket is waiting:
- timeout method closes the socket, Exception is thrown, everything is
fine.
2. Timeout apears after the internal socket method returned.
2.1 the DisableTimeout method is first to lock the timer object
- the timeout is disabled, and a TimeoutActive is set to false (this is
set to true in the InitTimeout methods)
- then the OnTimeout method acquires the lock and because TimeoutActive
is false, the socket will not be closed
- the method returns correct
2.2 the OnTimeout method is first to lock the timer object
- the OnTimeout method closes the socket
- then the DisableTimeout method acquires the lock and because the
socket is closed, the method will throw a SocketException
3. The Timeout apears after the send/receive returned
- timeout is disabled everything is fine.
If i missed something please tell me.
The only downside is 2.2 where you got the result, but have to throw it
away. I found know way to perhibit this. At least it returns a correct
(Exception and socket closed/value and sockte open) to the upper level.
regards
/matthias
More information about the Mono-devel-list
mailing list