c socket read返回-1,但奇怪地通过while测试?

0 c sockets

我正在尝试使用c套接字编程完成Web代理.当客户端在浏览器中按下STOP按钮时,服务器在读取时返回-1,但它似乎奇怪地通过了while测试,代码如下:(rio_readlineb是从缓冲区rio到用户缓冲区buf的强大读取)

while ((n = rio_readlineb(&rio,buf,MAXLINE)) > 0){
 printf("%d",n)
}
Run Code Online (Sandbox Code Playgroud)

因为n大于零,怎么能打印出-1?

额外信息(来自评论):

  • 该类型n应该是类型ssize_t.
  • 返回类型rio_readlineb()也是类型ssize_t.

...

  • 糟糕:问题在于n实际上是类型size_t.

oua*_*uah 5

检查类型n不是无符号整数类型.检查大于或等于0时无符号整数类型对象的结果始终为1(真).