Linux客户端套接字:连接前无法设置O_NONBLOCK?
问题描述:
是否可以实现非阻塞客户端套接字?我已经尝试使用Linux客户端套接字:连接前无法设置O_NONBLOCK?
sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
但是当应用达到connect
声明,它与下面的错误存在:
ERROR connecting: Operation now in progress
我需要创建一个完全无阻塞的插座,那并不是”甚至不用等待TCP握手。这可能使用标准套接字函数,还是必须进入线程?
答
在非阻塞模式下,您收到的错误是正常的。 这只是意味着操作无法立即完成。这意味着您需要等待连接的文件描述符完成后才能使用它。
这是非阻塞插座在C中工作的方式。
请问我该查找什么功能? – 2011-03-15 08:42:09
你应该寻找选择或民意调查。 – 2011-03-15 09:00:31
想出来:尝试连接非阻塞套接字时,connect()函数返回一个EINPROGRESS错误,但必须忽略该特定错误。 – 2011-03-18 08:55:17