在 ubuntu 12.04 中,我想写一个并发服务器,它可以从我的虚拟机接收 http 数据包,然后将数据包转发到我的虚拟机的原始目的地。但是当我在 C 语言中使用 read 函数读取数据包时,有时返回值和缓冲区的长度不一样(例如: rbyte=1024, strlen(buf)=62 )。我检查了errno,发现errno=0,这意味着read函数没有错误。我认为这两个变量应该是完全一样的,但是对于我的程序来说,它们不是。以下是我的代码的一部分:
char buf[1024];
size_t rbyte = read(sFrom, buf, sizeof(buf) );
cerr << "length of buf: " << strlen(buf) << "\n";
cerr << "rbyte: " << rbyte << "\n";
我已阅读http://pubs.opengroup.org/onlinepubs/009695399/functions/read.html以获得一些线索,但仍然不知道此错误的原因。
有谁知道原因?