【发布时间】:2014-04-26 13:27:45
【问题描述】:
我有两个程序:一个客户端(它只是包装有问题的库)和一个回显服务器。客户端连接回显服务器,发送 X 个字节,回显服务器回显它们。
当客户端尝试从套接字(文件)描述符中读取时,会出现“错误文件描述符”错误(EBADF)。
出于调试目的,在使用 perror() 在控制台上抛出错误之前,我尝试让客户端尝试像另一个问题的答案中建议的那样执行 write(),但问题确实存在。
TL;DR: 套接字描述符没有被修改,客户端最初可以 write() 到套接字,但相同的描述符后来变得无效。为什么?
当前代码可用here(库,第 106 行)、here(可使用库执行)和here(回显服务器,仅从互联网复制粘贴)- 我将添加有用的部分问题的代码在提供答案后立即进行。
【问题讨论】:
-
您的“错误”处理无效。事物可以将 errno 设置为非零并且不会失败。如果函数返回错误,您应该只检查 errno,您的代码没有正确执行此操作。
-
这实际上解决了这个问题。我在下一次 read() 时检查了这种问题,但完全忘了在第一次添加检查。谢谢。