我有一个基于 TCP 的套接字,我正在 C++03 程序中写入该套接字。在某些情况下,我从 write() 得到零返回结果。write(2) 手册页部分说明:
成功时,返回写入的字节数(零表示未写入任何内容)。出错时,返回 -1,并适当设置 errno。
那么,零真的意味着没有错误,我应该再次调用 write 直到我已经写完所有内容?换句话说,我是否应该像对待部分写入一样处理零,其中写入的字节数少于count
我传递给写入的字节数,然后继续尝试直到达到count
写入的总字节数?
我想确保我不会陷入无限循环,写入连续返回零并且永远不会取得进展。我是否应该先调用 select() 以确保文件描述符在调用 write 之前准备好?我在文件描述符上启用了阻塞。