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中工作的方式。

+0

请问我该查找什么功能? – 2011-03-15 08:42:09

+0

你应该寻找选择或民意调查。 – 2011-03-15 09:00:31

+1

想出来:尝试连接非阻塞套接字时,connect()函数返回一个EINPROGRESS错误,但必须忽略该特定错误。 – 2011-03-18 08:55:17