c ++中的非阻塞套接字

时间:2013-04-07 11:21:51

标签: c++ sockets pthreads posix

我在c ++中编写客户端,客户端在两个不同的端口上获得响应。 我在主线程中正在侦听一个端口,而我创建了其他线程(基于posix),如下所示:

void *receiveFunc(void *ptr)
{
    try {
        while ( true ) {
            svr_sock << svr_data;
            cout<<svr_data<<endl;
        }
    } catch ( SocketException& ) {}
}

但是当它进入这个线程时,它永远不会出现,直到我在套接字上收到了一些东西。

我该如何克服这个问题?

3 个答案:

答案 0 :(得分:1)

您的套接字处于阻止模式。

这取决于您使用过的操作系统如何将套接字设置为非阻塞模式。

Linux :您需要将套接字设置为非阻塞模式,如Beej's guide中所述。

Windows :您必须使用winsock WinAPI功能。

答案 1 :(得分:0)

为什么你需要它'出来'?

无论如何,说服这样一个被阻塞的线程退出的常用方法是为while循环设置一些'terminate'bool来检查然后关闭套接字。这会导致套接字读取提前返回错误。

答案 2 :(得分:0)

除上述答案外,beej指南的新链接为: https://beej.us/guide/bgnet/html/#blocking