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

Keep alive не се препоръчва да се ползва. Това е параметър на системата не на програмата.
Имплементирай си твой подобен механизъм за да ти е чиста главата.
Keep alive не се препоръчва да се ползва. Това е параметър на системата не на програмата.
Имплементирай си твой подобен механизъм за да ти е чиста главата.
Re: SetSocketOption и KeepAlive в C#
Може да ползва некъв извънземен протокол.
В смисъл такъв, дето не го е изобретил той и няма възможност да го модифицира. Но така или иначе, щом се затвори конекцията, приложението получава съобщение за тая работа.
Re: SetSocketOption и KeepAlive в C#
По въпроса за затваряне на конекцията. И да и не. При нормална ситуациа на затваряне на сокет да. Ако между клиента и сервер-а има firewall, не е зафължително. Зависи най-вече как е имплементиран firewall-a. Ако праща RST към клиента и сервер-а да, ако не е проблем за този който е в recv.
А иначе KeepAlive (Ping, heart beat) се имплементира сравнително лесно на ниво приложение.
А иначе KeepAlive (Ping, heart beat) се имплементира сравнително лесно на ниво приложение.
Re: SetSocketOption и KeepAlive в C#
Т.е. искаш да кажеш, че когато отсреща се дропне конекцията, сокета на клиента ще зависне в безкрайно очакване?
Едва ли. Това дори самоделна firewall не би го допуснала.
Re: SetSocketOption и KeepAlive в C#
Проблема обикновенно не е в клиента. Всички firewall-и с които съм работил до момента пращат RST към клиента, но не и към сервера, което е проблем ако ти пишеш сервер-а
Получава се leak който може да се реши само с keep alive.
Получава се leak който може да се реши само с keep alive.
Re: SetSocketOption и KeepAlive в C#
Ако не пише сервер, не виждам защо му е keep alive. Всъщност не съм прав, има ситуация когато клиента също може да зависне. Когато кабела се прекъсне при сервер-а, а клиента е в recv.