Закрытие конца чтения сокета при сохранении конца отправки - PullRequest
1 голос
/ 18 декабря 2010

У меня есть сервер, который получает и отправляет данные.

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

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

Спасибо,

Ответы [ 3 ]

3 голосов
/ 18 декабря 2010

Вы можете использовать функцию shutdown() для этого. От man 2 shutdown:

СИНТАКСИС

 #include <sys/socket.h>

 int shutdown(int s, int how);

ОПИСАНИЕ

Вызов shutdown () вызывает полное или частичное дуплексное соединение на сокет, связанный с s, должен быть выключен. Если как SHUT_RD, дальше получает будет запрещено. Если как SHUT_WR, дальнейшие посылки будут неразрешенный. Если как SHUT_RDWR, дальнейшие отправки и получения будут отклонены допускается.

0 голосов
/ 20 декабря 2010

'хотите сохранить отправку активной, чтобы данные в буфере отправлялись.'.

Данные в каком буфере?Ваш выходной поток или писатель?Просто закрой его.Он будет отправлен.

Если вы обращаетесь к буферу отправки сокетов, у вас есть еще меньше поводов для беспокойства.

Решение shutdown () имеет зависящий от платформы эффект на другом (отправка) конец.На некоторых платформах (Windows) отправитель получает «сброс соединения».На других платформах (Linux) отправитель заполняет приемный буфер получателя и свой собственный буфер отправки и в конечном итоге останавливается.На других платформах (BSD) отправитель будет продолжать весело писать вечно, что, вероятно, является наилучшей реализацией, но тратит пропускную способность.

0 голосов
/ 18 декабря 2010

Вы можете использовать shutdown () в функциональности сокета, чтобы добиться этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...