Re[5]: TCP/IP ошибка инициализации
От: _monster_  
Дата: 20.01.04 17:38
Оценка:
Здравствуйте, __boolean, Вы писали:

__>Ну я проверял, если вызвать shutdown и не дожидаться FD_CLOSE, то на удаленной стороне

__>сработает WSAGETSELECTERROR(lParam).

Обычный способ завершения соединения — вызов функции close (closesocket в Windows). При этом данный процесс не может больше использовать дескриптор сокета. Счетчик ссылок на этот дескриптор уменьшается на 1. Если он достигает нуля, то по умолчанию отправляются данные, поставленные в очередь для отправки, и осуществляется завершение соединения. (Поведение функции close можно изменить, воспользовавшись параметром сокета SO_LINGER). Если же он больше нуля, то завершения соединения не происходит.
Функция shutdown позволяет закрыть принимающий/отправляющий/оба конца соединения, несмотря на значение счетчика ссылок.

И еще. При завершении процесса все его открытые дескрипторы закрываются.

Теперь о примере. Что-то не совсем понятно, где что закрывается с помощью shutdown. Подробнее pls.
Если клиент поработал с сервером, и ему (клиенту) от него (сервера) уже ничего не нужно, то вызови close. Если клиент закончил отправку данных, но еще хочет что-то принять, то shutdown для отправляющего конца. Если наоборот — для принимающего.

А вообще, если собрался использовать все преимущества Winsock, то очень рекомендую посмотреть MSDN, как это делают ребята из Майкрософта.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.