【问题标题】:Linux client socket: can't set O_NONBLOCK before connect?Linux客户端套接字:连接前不能设置O_NONBLOCK?
【发布时间】:2011-03-15 08:31:04
【问题描述】:

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

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 sockets


    【解决方案1】:

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

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

    【讨论】:

    • 请问我应该查找什么函数?
    • 你应该寻找 select 或 poll。
    • 想通了:connect() 函数在尝试连接非阻塞套接字时返回 EINPROGRESS 错误,但必须忽略该特定错误。
    猜你喜欢
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 2011-08-03
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-02-03
    • 2013-04-21
    相关资源
    最近更新 更多