2013-09-13 2 views
-2

Если я потеряю соединение с сервером, я запускаю будильник, чтобы отключиться через 10 минут. Тем временем я пытаюсь создать сокет и восстановить соединение с сервером. Если при отключении будильника соединение с сервером отсутствует, я хочу закрыть приложение.Обнаружение сетевой активности в C

Что было бы хорошим способом проверить, существует ли живое соединение в сокете? Я не уверен, допустимы ли методы блокировки (очевидно, если нет альтернативы).

ответ

1

Если я потерял соединение с сервером, я запустил будильник, чтобы отключиться через 10 минут.

Итак, в этот момент вы знали, что связи нет.

Тем временем я пытаюсь создать сокет и восстановить соединение с сервером. Если при отключении будильника соединение с сервером отсутствует, я хочу закрыть приложение.

Что было бы хорошим способом проверить, существует ли живое соединение в сокете? Я не уверен, допустимы ли методы блокировки (очевидно, если нет альтернативы).

Если вы знали, что при настройке будильника не было соединения, почему бы вам не знать то же самое, когда оно истечет?

Мне кажется, что все, что вам нужно сделать, это проверить сокет fd. Если он не равен нулю, у вас есть соединение; если он равен нулю, вы этого не сделаете. И убедитесь, что вы обнуляете его при настройке будильника.

0

Просто сохраните результат функции «connect()» в любом месте, поэтому вы сможете проверить его за 10 минут.

+0

Не опустошайте это, но если бы я был человек, задающий этот вопрос, я не уверен, что этот ответ мне поможет. Немного больше деталей не повредит. – us2012

0

Что было бы хорошим способом проверить, существует ли живое соединение в розетке? Я не уверен, допустимы ли методы блокировки (очевидно, если нет альтернативы).

Я предполагаю, что из этого вопроса вы получите объяснение выше, что у вас есть идея, как обращаться с потерянным соединением, но не знаете, как проверить, жив ли соединение.

Лучший способ проверить, является ли соединение еще живым, - периодически отправлять сообщение серверу «фиктивный/heartbeat/keep-alive». Как только соединение будет мертвым, разъем tcp выдаст вам ошибку (после таймаута), чтобы вы знали, что соединение сработало, и вы можете попытаться снова подключить/оповестить о тревоге и т. Д.

Смежные вопросы