чтение из сокета возвращает -1, но странно проходит тест while? - PullRequest
0 голосов
/ 31 декабря 2011

Я пытаюсь завершить веб-прокси с помощью программирования сокетов c. когда клиент нажимает кнопку STOP в браузере, сервер возвращает -1 в режиме чтения, но кажется, что тест проверки проходит странно, код выглядит следующим образом: (rio_readlineb - надежное чтение из буфера rio в пользовательский буфер buf)

while ((n = rio_readlineb(&rio,buf,MAXLINE)) > 0){
 printf("%d",n)
}

Так как n больше нуля, как можно распечатать -1?

Дополнительная информация (из комментариев):

  • Тип n должен иметь тип ssize_t.
  • Тип возврата rio_readlineb() также имеет тип ssize_t.

...

  • Упс: проблема была в том, что n был на самом деле типа size_t.

1 Ответ

5 голосов
/ 31 декабря 2011

Убедитесь, что тип n не является целым типом без знака. Результат объекта целочисленного типа без знака при проверке, если больше или равно 0, всегда равен 1 (true).

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