Natychmiastowy reload socketa

0

Witam

Czy ktoś wie w którym języku programowania (o ile taki istnieje) po wykryciu zerwania połączenia z socketem może nastąpić natychmiastowy reload połączenia? Na razie próbowałem Pythona i Ruby i w obu tych językach trzeba czekać kilkanaście sekund na reload po zerwaniu połączenia z socketem.

0

w każdym języku - problemem nie jest czas zestawienia ponownie połączenia tylko czas w jakim może zostać wykryte zerwane połączenie - nie wysyłając i nie odbierając żadnych danych może się to nigdy nie wydarzyć. w przypadku tcp keep-alive może to wykryć po kilku/kilkudziesięciu sekundach. jedynym rozwiązaniem jest zrobienie heartbeata, czyli zmuszenie klienta do ciągłego wysyłania informacji o swojej obecności i natychmiastowe stworzenie nowego połączenia gdy trwa to za długo

0

Co znaczy wykrycie przerwania połączenia? Czy masz na myśli, że serwer zawołał close na sockecie? Czy, że serwer miał awarię i wykopał twój socket bez wołania close?

Generalnie nie ma czegoś takiego jak reload. Zerwane połączenie TCP trzeba na nowo inicjować za pomocą connect

0

@mlyszczek tak, mam na myśli to że serwer wywołał close na sockecie. Nawet ja jestem w stanie ocenić w którym to dokładnie było momencie, a program nie jest i musi czekać zanim rzuci wyjątek.

Chodzi mi tylko o to, czy naprawdę on musi tyle czekać.

0

Nie musisz czekać. Możesz sprawdzać co zwraca recv. Gdy recv zwróci 0, to znaczy, że serwer wysłał FIN. Po tym możesz zrobić close na swoim socket'cie aby też wysłać FIN. Dopiero wtedy połączenie zostanie całkowicie poprawnie zamknięte. Aby to działało socket musi działać jako blocking

0

to nie kwestia języka programowania tylko systemu i protokołu
sockety po zamknięciu pozostają w trybie uśpienia żeby pakiety które są potencjalnie w drodze nie zostały przypadkowo dostarczone do nowego połączenia otwartego na tym samym porcie. Zamiast zwyczajnie wywoływać close, wyślij komunikat że zamknąłeś połączenie i dopiero je fizycznie zamknij

1 użytkowników online, w tym zalogowanych: 0, gości: 1