В C получение 0 от вызова чтения с использованием сокета TCP означает, что был получен FIN? - PullRequest
1 голос
/ 05 декабря 2010

Иногда мне кажется, что я получаю 0, что означает, что все, что я получил, это заголовок, означает ли это, что я должен предполагать, что получил FIN и закрыть этот сокет?

Заранее спасибо!

Ответы [ 3 ]

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

Да.Ноль означает, как правило, конец файла.То, что означает «конец файла», зависит от того, какой тип файлового дескриптора вы используете.

В контексте сокета TCP единственный способ, которым я знаю, что вы можете прочитать ноль, это получить FIN,Напротив, если RST получен, read() вернет -1 с errno == ECONNRESET.

1 голос
/ 29 декабря 2013

Вы также можете получить 0 из чтения, даже если сокет все еще подключен, а удаленная сторона не закрыта. Это произойдет, если вы передадите 0 как количество.

1 голос
/ 05 декабря 2010

Я не знаю (от головы до головы), вы должны получили пакет FIN, но вы правы на втором счету.

ВозвратКод 0 означает конец файла, что в контексте сокетов означает, что данных больше не будет.

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