Introduction
Detecting the closing of a connection is an important part of handling sockets, this article isn't the most complicated one there is, but it clarifies some info that i had to look for in a lot of places.
The problem was (for me :] ) how to detect when a Socket connection is closed by the other peer. and this is all about the solution
Where did i find the solution
i must state that i have looked into it alot and it really made me feel good to get this. As i looked EVERYWHERE in the web for the key as i finaly found it in this newbie FAQ
http://tangentsoft.net/wskfaq/newbie.html
and it is actually pretty simple. (There are lots of other important information in there.)
The Solution
i'll quote the article :
"With asynchronous sockets, Winsock sends you an FD_CLOSE message when the connection drops. Event objects are similar: the system signals the event object with an FD_CLOSE notification.
With blocking and non-blocking sockets, you probably have a loop that calls recv() on that socket. recv() returns 0 when the remote peer closes the connection. As you would expect, if you are using select(), the SOCKET descriptor in the read_fds parameter gets set when the connection drops. As normal, you'll call recv() and see the 0 return value."
I'll supply i small segment of vb.net code just to demostrate
Note: This is for using Synchronous Sockets
Try
Dim ReceivedBytes As Integer
Dim tmpBuffer As Byte()
ReDim tmpBuffer(1024)
While blActive And Socket.Connected
tmpBuffer.Clear(tmpBuffer, 0, tmpBuffer.Length)
ReceivedBytes = Socket.Receive(tmpBuffer, 0, tmpBuffer.Length, Sockets.SocketFlags.None)
If ReceivedBytes > 0 And blActive Then
DataReceived_Handler(tmpBuffer)
Else
yourCloseSocket()
End If
End While
(Fade) NOTE: This only detects when the closing of the connection is notifiable by your peer, in case of an unpredictable disconnection (a router in the middle of nowhere get blown to pieces) both peers might not receive notification on the disconnection, so be sure to send "Keep-Alive" packets (your own - not the ones embedded into the TCP protocol!) to monitor your connection's health.
Some of the knoledge and code presented here originated from my work at ActiveRoom on the Digital Signage system TVM.
Just wanted to share this information,
I'll be sure to post a more comprehensive article about .Net.Sockets, including Async & Sync socket usage and Asynchronous calls when i get the time