Добрый день.
Создаю сокет и после задаю параметры KeepAlive:
private static Socket ConnectSocket(IPAddress ipAddress, Int32 Port)
{
Socket _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(ipAddress, Port);
_serverSocket.Connect(ipep);
SetSocketKeepAlive(_serverSocket, true, 1000, 1000);
return _serverSocket;
}
private static void SetSocketKeepAlive(Socket s, bool on, uint time, uint interval)
{
s.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
uint dummy = 0;
byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
BitConverter.GetBytes((uint)(on ? 1 : 0)).CopyTo(inOptionValues, 0);
BitConverter.GetBytes((uint)time).CopyTo(inOptionValues, Marshal.SizeOf(dummy));
BitConverter.GetBytes((uint)interval).CopyTo(inOptionValues, Marshal.SizeOf(dummy) * 2);
// of course there are other ways to marshal up this byte array, this is just one way
int ignore = s.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
}
Что произойдет когда связь оборвется (например выдергнуть кабель из сетевки)?
В каком месте и как проверять произошло это или нет?