2011-03-15 96 views
1

是否可以實現非阻塞客戶端套接字?我已經嘗試使用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握手。這可能使用標準套接字函數,還是必須進入線程?

回答

2

在非阻塞模式下,您收到的錯誤是正常的。 這只是意味着操作無法立即完成。這意味着您需要等待連接的文件描述符完成後才能使用它。

這是非阻塞插座在C中工作的方式。

+0

請問我該查找什麼功能? – 2011-03-15 08:42:09

+0

你應該尋找選擇或民意調查。 – 2011-03-15 09:00:31

+1

想出來:嘗試連接非阻塞套接字時,connect()函數返回一個EINPROGRESS錯誤,但必須忽略該特定錯誤。 – 2011-03-18 08:55:17