Завершение розеток C - PullRequest
       6

Завершение розеток C

2 голосов
/ 08 сентября 2011
  1. Если read () на сокете tcp / ip получает конец файла, будет ли наличие eof вызывать завершение сокета?

  2. При выполнении read () для сокета tcp / ip, если размер потока неизвестен, получит ли читатель EOF, чтобы он мог прекратить чтение дальше?

1 Ответ

2 голосов
/ 08 сентября 2011

Нет обоим.В протоколе TCP нет такого понятия, как EOF.

Если вы хотите определить его в протоколе приложения, вы можете сделать это (и должны), но read не остановится или не закроетсясокет, когда он его видит.

TCP - чисто потоковая база.Извлечение «пакетов» данных зависит от приложения.

Если вам нужно отправить только одно сообщение через TCP-соединение, вы можете закрыть сокет на стороне отправителя, когда закончите отправку.Тогда принимающая сторона read будет считывать только то, что было отправлено, и возвращает 0, когда для чтения больше не осталось.Но вам придется заново открыть новое соединение, чтобы отправить следующее сообщение в этом случае.

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