- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从阻塞套接字中读取,但我想知道 read()
返回 -1,我认为这意味着当前没有数据可读 - 我希望它会阻塞直到它可以读取字节数。
我还尝试确保套接字处于阻塞模式并且使用以下方法设置了高超时:
int setBlockingIO(int fd)
{
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
int nTimeout = 30000; // 30 seconds
setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&nTimeout, sizeof(int));
}
但这并没有改变任何东西。
我的问题:
read()
真正阻止 ?
我知道有 another question关于这个主题,但我找不到问题的答案。
更新
如果不设置超时,read()
也会立即(主观地)返回 -1
更新 2
errno
为 107(ENOTCONN,传输端点未连接)
。但客户端并没有同时关闭连接(由 write()
之后的长 sleep()
确保)
最佳答案
你期待什么?你说你有一个非阻塞套接字,所以它当然不会阻塞。 read
上的非阻塞套接字的行为是,如果有数据可供读取,则立即返回一些数据(可能比请求的数量短),并返回 -1 和 errno
设置为 EAGAIN
或 EWOULDBLOCK
如果没有数据可用。
如果您不想要非阻塞行为,为什么要将套接字设置为非阻塞?
编辑:哎呀,你已经改变了你的问题。 ENOTCONN
的原因是您试图从未连接的套接字中读取。除非通过 accept
或 socketpair
获得套接字,否则您必须在 read< 之前对其调用
将起作用。connect
以将其连接到远程地址
关于c - 套接字:为什么阻塞 read() 因 ENOTCONN 而失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018305/
我正在尝试将图像上传到 Aws S3 存储桶。我尝试按照教程进行操作,但收到一条错误消息“正在返回 ENOTCONN,因为尚未设置协议(protocol)。”我是 swift 的新手,我也无法理解为什
这是在 AS400(IBM i、iSeries 等)上。 我有一个小型 Java 程序,用于将测试文件发送到用 C++ 编写的服务器,该服务器也在 IBM i 上运行。在我的 Java 程序中,我将响
Node 项目在几个月前运行良好,现在在实现套接字之后,当尝试运行应用程序时,我看到以下错误: Error in console(git bash) 我正在使用 win 10,尝试更改 Node 版本
我正在尝试从阻塞套接字中读取,但我想知道 read() 返回 -1,我认为这意味着当前没有数据可读 - 我希望它会阻塞直到它可以读取字节数。 我还尝试确保套接字处于阻塞模式并且使用以下方法设置了高超时
为要写入文件流的 console.log 或 console.error 创建了访问和错误管道或可写流。 var fs = require("fs"); var access = fs.createW
我是一名优秀的程序员,十分优秀!