SetSocketOption и KeepAlive в C#

7 отговора 245 прегледа
#1

SetSocketOption и KeepAlive в C#

Пиша една програма със сокети и искам да използвам KeepAlive на SetSocketOption, за да проверявам активна ли е връзката. Интервала през който се проверява, по подразбиране е 2 часа, а аз искам да го променя на 20 секунди:
MySocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 20000);
Обаче така не работи. Знае ли някой как трябва да се направи?

Отговор
в отговор на dani_! #2

Re: SetSocketOption и KeepAlive в C#

Темата направо е за закриване
Keep alive не се препоръчва да се ползва. Това е параметър на системата не на програмата.
Имплементирай си твой подобен механизъм за да ти е чиста главата.

Отговор
в отговор на qwerty #3

Re: SetSocketOption и KeepAlive в C#

Може да ползва некъв извънземен протокол. В смисъл такъв, дето не го е изобретил той и няма възможност да го модифицира. Но така или иначе, щом се затвори конекцията, приложението получава съобщение за тая работа.



Отговор
в отговор на Pekoнcтpykтop #4

Re: SetSocketOption и KeepAlive в C#

По въпроса за затваряне на конекцията. И да и не. При нормална ситуациа на затваряне на сокет да. Ако между клиента и сервер-а има firewall, не е зафължително. Зависи най-вече как е имплементиран firewall-a. Ако праща RST към клиента и сервер-а да, ако не е проблем за този който е в recv.
А иначе KeepAlive (Ping, heart beat) се имплементира сравнително лесно на ниво приложение.

Отговор
в отговор на qwerty #5

Re: SetSocketOption и KeepAlive в C#

Т.е. искаш да кажеш, че когато отсреща се дропне конекцията, сокета на клиента ще зависне в безкрайно очакване? Едва ли. Това дори самоделна firewall не би го допуснала.



Отговор
в отговор на Pekoнcтpykтop #6

Re: SetSocketOption и KeepAlive в C#

Проблема обикновенно не е в клиента. Всички firewall-и с които съм работил до момента пращат RST към клиента, но не и към сервера, което е проблем ако ти пишеш сервер-а
Получава се leak който може да се реши само с keep alive.

Отговор
в отговор на qwerty #7

Re: SetSocketOption и KeepAlive в C#

Нда. Задачата явно трябва да се доуточни.



Отговор
в отговор на Pekoнcтpykтop #8

Re: SetSocketOption и KeepAlive в C#

Ако не пише сервер, не виждам защо му е keep alive. Всъщност не съм прав, има ситуация когато клиента също може да зависне. Когато кабела се прекъсне при сервер-а, а клиента е в recv.

Отговор