Sockets 在实际系统中bind()是否可以返回EINPROGRESS?
根据POSIX,如果在非阻塞套接字上调用Sockets 在实际系统中bind()是否可以返回EINPROGRESS?,sockets,posix,Sockets,Posix,根据POSIX,如果在非阻塞套接字上调用bind,则允许返回EINPROGRESS并异步完成。() 我检查了libuv和Twisted的源代码,据我所知,它们都在非阻塞套接字上调用了bind,而没有处理此错误。Linux或FreeBSDbind(2)手册页都没有提到这是一种可能的结果 这真的发生在任何真实的系统上吗?如果是这样,当绑定完成时,您如何得到通知?还说:“当异步执行赋值时,pselect()、select()、和poll()应指示套接字的文件描述符已准备好读写。”因此,就像任何其他异步
bind
,则允许返回EINPROGRESS
并异步完成。()
我检查了libuv和Twisted的源代码,据我所知,它们都在非阻塞套接字上调用了bind
,而没有处理此错误。Linux或FreeBSDbind(2)
手册页都没有提到这是一种可能的结果
这真的发生在任何真实的系统上吗?如果是这样,当
绑定完成时,您如何得到通知?还说:“当异步执行赋值时,pselect()
、select()
、和poll()
应指示套接字的文件描述符已准备好读写。”因此,就像任何其他异步套接字操作一样,您必须轮询套接字状态以了解操作何时完成。您应该跟踪了解您是否正在等待bind()
vsrecv()
vssend()
,等等。bind()
在网络上没有任何功能,因此它没有任何阻塞。我怀疑这都是编辑上的错误@雷米尔博,这根本没有道理。只有绑定的套接字永远不会为I/O做好准备。您必须在其上调用listen()
或connect()
,它才符合条件。事实上,我认为listen()
也被描述为阻塞调用,但也没有人为此编写程序。我没有看到任何关于listen
异步完成的内容。对于bind
来说,这是一个有意的改变:搜索ud bind async。因此,听起来IPv4/6永远不应该出现这种情况,但在理论上,对于其他一些协议,可能会出现这种情况。我仍然有兴趣知道是否有这样的实现被部署过,如果有,它们的行为是什么。