Восстановление соединения после физического разрыва
От: Аноним  
Дата: 14.04.05 04:31
Оценка:
Привет всем!

Имеется прога, реализованная с помощью сокетов, основная задача которой чтение видео с камер.
Для каждой камеры открывается TCP сокет, один раз посылается запрос с помощью send(...), а затем идет чтение непрерывного потока кадров с помощью recv(...).
Нужно отслеживать физический разрыв соединения с камерой, с последующим его восстановлением с максимально возможной скоростью.

Вопросы:

1) Правильно ли я понимаю, что разрыв можно определить по коду возврата recv(...), если он 0 или -1 — то разрыв.
2) Если произошел разрыв, то как максимально эффективно и правильно снова его восстановить (нужно ли закрывать сокет и опять его открывать?). Я попробовал после разрыва (т.е. после возвращения recv(...) -1), восстановить соединения с помощью connect(...) не сработало.


Буду благодарен за толковые замечания!
Re: Восстановление соединения после физического разрыва
От: SkyDance Земля  
Дата: 14.04.05 04:46
Оценка:
wrote in message news:1123875@news.rsdn.ru...
> 1) Правильно ли я понимаю, что разрыв можно
> определить по коду возврата recv(...), если он
> 0 или -1 — то разрыв.

не совсем. Конкретную ошибку нужно всегда проверять с помощью WSAGetLastError (Windows) или errno (linux). Вам интересна в основном WSAECONNABORTED.

> Я попробовал после разрыва (т.е. после возвращения recv(...) -1),

> восстановить соединения с помощью connect(...) не сработало.

Курим MSDN:
WSAECONNABORTED The virtual circuit was terminated due to a time-out or other failure. The application should close the socket as it is no longer usable.

Так что, нужно закрыть-открыть сокет заново.


.
Posted via RSDN NNTP Server 1.9
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.