Linux客户端套接字:连接前无法设置O_NONBLOCK?

时间:2011-03-15 08:31:05

标签: c sockets

是否可以实现非阻塞客户端套接字?我尝试过使用

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握手。这可能是使用标准套接字功能还是我必须进入线程?

1 个答案:

答案 0 :(得分:2)

在非阻塞模式下,您收到的错误是正常的。 这只意味着该操作无法立即完成。这意味着您需要等待文件描述符才能完成连接,然后才能使用它。

这是非阻塞套接字在C中工作的方式。