【发布时间】:2021-09-21 20:31:58
【问题描述】:
我已经通过connect 打开了一个套接字,并且希望能够读取阻塞的结果并写入非阻塞的结果。我目前的解决方案是将文件描述符设置为非阻塞,然后在我执行read 时设置select。
这样做会更简单
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 在文件描述符上设置非阻塞?
【问题讨论】:
-
如果你使用
select,为什么要设置为非阻塞?为了写入它而让它非阻塞的目的是什么? -
您可以自己验证这一点,方法是在两个 fd 上执行
F_GETFL并比较返回值