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
错误,但必须忽略该特定错误。