read(2)返回比给定缓冲区长度更大的整数

时间:2018-01-28 12:16:30

标签: c++ c linux sockets

我在我的代码

中使用下面的linux read()函数
  

https://linux.die.net/man/2/read

 char buffer[1024];
 size_t size = read( m_fd , buffer, 1024);

套接字描述符" m_fd"被设置为非阻塞,如下所示;

 int flags = fcntl(m_fd, F_GETFL, 0);
 fcntl(m_fd, F_SETFL, flags | O_NONBLOCK);

" m_fd"是套接字描述符,设置为"非阻塞"在我的情况下,我希望"尺寸" return变量的值为0,-1或读取的字符数(在我的情况下最多为buffersize 1024),如下所述;

  

成功时,返回读取的字节数(零表示结束   (文件),文件位置按此编号前进。它不是   如果此数字小于请求的字节数,则出错;   例如,这可能发生,因为实际可用的字节更少   现在(也许是因为我们接近文件结尾,或者因为我们   从管道或终端读取,或因为read()是   被信号打断了。出错时,返回-1,并设置errno   适当。在这种情况下,文件是否未指定   位置(如果有的话)改变。

但是在套接字描述符" m_fd"是新创建的,并且没有任何内容写入,read()函数返回非常大的值,如" 18446744073709551615"并将errno设置为EAGAIN。 我希望它能回归" -1"像在其他AGAIN案件中一样。

有人知道为什么读取这种行为?

0 个答案:

没有答案