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

标签 c sockets

我正在尝试使用 C 套接字编程来完成 Web 代理。 当客户端在浏览器中按下 STOP 按钮时,服务器在读取时返回 -1,但是 它似乎奇怪地通过了while测试,代码如下: (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 类型。

最佳答案

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

关于c socket read 返回-1,但奇怪地通过了 while 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8688157/

相关文章:

sockets - 为什么 UDP 服务器中只有一个套接字?

C编程: Unable to perform do while looping in visual studio

sql - 如何将个位数值转换为sqlite3支持的日期格式? [ 值 0 填充]

c - GCC Profiler,时间不详

c - 使用单链表实现 BinarySearchTree

c++ - IOCP - 发布重叠或读取数据包?

c - 图形程序中的结构指针数组错误

java - 关闭 BufferedReader 而不关闭包装流

python - struct.pack() 因 int > 127 失败

c# - 使用 .net 的 Telnet 连接