作者:mobiledu2502886691 | 来源:互联网 | 2023-10-10 16:30
我已经通过打开一个套接字connect
并希望能够读取结果阻塞和写入非阻塞。我当前的解决方案是将文件描述符设置为非阻塞,然后select
当我执行read
.
做类似的事情会更简单
int sock = socket(...);
connect(sock, ...);
int reader = dup(sock);
int writer = sock;
fcntl(writer, F_SETFL, fcntl(writer, F_GETFL) | O_NONBLOCK);
是调用fcntl
导致reader
和writer
非阻塞(它在 I/O 对象上设置它)还是fcntl
在文件描述符上设置非阻塞?
回答
如果您fcntl
仔细阅读手册页,您会看到状态标志与文件描述相关联,而不是文件描述或. 并且dup
说,新的和旧文件DESCRIPT或指向同一个文件DESCRIPT离子。所以访问reader
和访问都writer
应该是非阻塞的。