Re[2]: Как закрыть сокет?
От: Andrew S Россия http://alchemy-lab.com
Дата: 05.10.02 20:37
Оценка:
Вот, читаем MSDN:

For connection-oriented sockets, readability can also indicate that a request to close the socket has been received from the peer. If the virtual circuit was closed gracefully, and all data was received, then a recv will return immediately with zero bytes read. If the virtual circuit was reset, then a recv will complete immediately with an error code such as WSAECONNRESET.

Итак — select при закрытии сокета почти бесполезен и вернет то, что есть данные на входе. И только чтением потом мы выясним, что собственно, канала уже нет. Очевидно, код ошибки получаем WSAGetLastError или просто GetLastError.
Это собственно, не супротив постинга, а так, для ясности


Здравствуйте Smart, Вы писали:

S>Здравствуйте Corvin, Вы писали:


C>>Такой проблем: есть клиент и сервер...<CRLF>

S>.<CRLF>
S>-)

S>1: recv() для SOCK_STREAM в случае закрытия сокета возвращает 0 или SOCKET_ERROR.

S>2: не забудьте в select() (если вы вообще используете эту функцию) указать группу сокетов для чтения (у сомого такая фигня была, часа 2 копался, а всё было так просто.
S>3: не используйте примочки Windows Sockets. Лучше уж старые Berkeley-совместимые (хоть и не полностью), но проверенные функции.
S>4: если вы храните дескриптор сокета в какой-нибудь динамической структуре данных, то проследите за тем, чтобы на стадии закрытия дескриптор всё-таки существовал (не удаляйте объект раньше времени).
S>5: у меня какой-то баг с STLport при посылке тескта сообщения (берётся из файла и на экран выводится вроде правильно, со всеми служебными символами, а Outlook Express продолжает ждать после приёма <CRLF>.<CRLF> ), а под Dinkumware STL (VC60SP5) всё нормально.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.