2010-11-23 5 views
3

Мое приложение подключается как клиент по сети к серверному процессу.Сброс сокетного соединения

Как сервер хорошо известен и не будет меняться, UDP и TCP являются установками с использованием

socket(); 
setsockopt(SO_REUSEADDR); 
bind(); 
connect(); 

Протокола соединения включает в себя сердцебиения, посланные в обоих направления.

Когда я обнаруживаю ошибку с соединением, например. hearbeat timeout, мне нужно сбросить соединение.

Достаточно ли просто подключить() к NULL-адресу, а затем повторно подключиться() после короткой паузы или закрыть ящик, а затем повторно инициализировать с нуля?

благодаря

ответ

1

У вас должно быть close(2) разъем и снова сделать все заново. Почему у вас bind(2) на клиенте?

+0

Я связываю() так, чтобы указать порт и адрес источника - сервер принимает только соединения из известных портов и адресов. – DanS 2010-11-23 17:12:14

2

После ошибки сокета вы должны отказаться от одного в руке и перезапустить установку с новым сокетом.

Winsock documentation, например:

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

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