Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux客户端套接字:can';连接前是否设置O_非阻塞?_C_Sockets - Fatal编程技术网

Linux客户端套接字:can';连接前是否设置O_非阻塞?

Linux客户端套接字:can';连接前是否设置O_非阻塞?,c,sockets,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语句时,它存在以下错误: 连接错误:操作正在进行 我需要创建一个完全无阻塞的套接字,它甚至不需要等待TCP握手。这可能是使用标

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

sockfd = socket(AF_INET, SOCK_STREAM, 0);
fcntl(sockfd, F_SETFL, O_NONBLOCK);
connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr));
但是当应用程序到达
connect
语句时,它存在以下错误:

连接错误:操作正在进行


我需要创建一个完全无阻塞的套接字,它甚至不需要等待TCP握手。这可能是使用标准套接字函数实现的,还是我必须进入线程状态?

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


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

我应该查找什么函数?您应该查找select或poll。解决方法是:
connect()
函数在尝试连接非阻塞套接字时返回一个
EINPROGRESS
错误,但必须忽略该特定错误。