【问题标题】:Winsock listen and accept functions (C++)Winsock 监听和接受函数 (C++)
【发布时间】:2013-03-05 20:28:53
【问题描述】:

如果我有一个无限循环中的侦听套接字,在我运行接受函数之前,我有什么方法可以知道是否已经与它建立了连接? 我希望能够先执行一些操作:

sock_connection[0] = accept(sock_listen, (SOCKADDR*)&Address, &AddressSize)

具体来说,您可以看到我的 sock_connection[0] 变量是一个数组。现在,在我真正接受连接之前,我希望能够遍历这个数组,而不是现在的 0,它应该返回数组中的一个可用点。

那么,有什么方法可以在运行接受之前检测到连接?

【问题讨论】:

    标签: c++ winsock listen


    【解决方案1】:

    使用动态容器不是更容易吗?

    类似:

    vector<int> socket_pool;
    int connection = accept(sock_listen, (SOCKADDR*)&Address, &AddressSize);
    
    if (connection > 0)
         socket_pool.push_back(connection);
    

    【讨论】:

    • 如果线程在 select 调用中被阻塞,您将无法在这些套接字上处理 io 事件。
    • @infact 我没有尝试过阻塞套接字,但是我在非阻塞套接字服务器中使用了这个策略并且工作正常。感谢您的评论。
    猜你喜欢
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 2017-01-05
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多