2

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

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

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

我该如何克服这个问题?

4

3 回答 3

2

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

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

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

Windows:您必须使用winsock WinAPI 函数。

于 2013-04-07T11:26:53.243 回答
0

为什么需要它“出来”?

无论如何,说服这样一个阻塞的线程退出的通常方法是设置一些“终止”布尔值,以便 while 循环检查然后关闭套接字。这会导致套接字读取提前返回并出现错误。

于 2013-04-07T22:23:47.263 回答
0

除了上面的答案,beej 指南的新链接是: https ://beej.us/guide/bgnet/html/#blocking

于 2019-12-18T14:03:46.670 回答