Как работает KeepAlive на сокетах
От: lutikman  
Дата: 19.11.10 10:36
Оценка:
Добрый день.

Создаю сокет и после задаю параметры 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);
        }


Что произойдет когда связь оборвется (например выдергнуть кабель из сетевки)?
В каком месте и как проверять произошло это или нет?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.