Для установки KeepAlive опции я использую метод socket.IOControl
:
[StructLayout(LayoutKind.Sequential)]
struct TcpKeepAlive {
public uint dwOnOff;
public uint dwKeepAliveTime;
public uint dwKeepAliveInterval;
};
private static void SetKeepAliveOption(Socket socket) {
var tcpKeepAlive = new TcpKeepAlive()
{
dwOnOff = 5,
dwKeepAliveInterval = 200,
dwKeepAliveTime = 10000
};
var keepAlivePtr = IntPtr.Zero;
int structSz = 0;
structSz = Marshal.SizeOf(tcpKeepAlive);
keepAlivePtr = Marshal.AllocHGlobal(structSz);
Marshal.StructureToPtr(tcpKeepAlive, keepAlivePtr, true);
byte[] structBytes = new byte[structSz];
Marshal.Copy(keepAlivePtr, structBytes, 0, structSz);
Marshal.FreeHGlobal(keepAlivePtr);
socket.IOControl(IOControlCode.KeepAliveValues, structBytes, null);
}
Создание сокета:
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Опцию устанавливаю до соединения (вроде как нельзя устанавливать опции для уже подключённых сокетов (Как тогда устанавливать опции для клиентов в socket.Listen
методе?)).
Проблема следующая: Каким образом можно определить, что удалённая машина не доступна? Как определить результат использования опции? Ведь как-то она должна сообщать о результате проверок.
Что будет если у обоих клиентов будет включена эта опция? Будет ли такое соединения работать корректно?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Имеется код, который должен завершать процесс, который был запущен из указанной папки:
У меня проблема с парсингом даты из строки в Datetime формат, когда я использую, напр01