我在c ++中编写客户端,客户端在两个不同的端口上获得响应。 我在主线程中正在侦听一个端口,而我创建了其他线程(基于posix),如下所示:
void *receiveFunc(void *ptr)
{
try {
while ( true ) {
svr_sock << svr_data;
cout<<svr_data<<endl;
}
} catch ( SocketException& ) {}
}
但是当它进入这个线程时,它永远不会出现,直到我在套接字上收到了一些东西。
我该如何克服这个问题?
答案 0 :(得分:1)
您的套接字处于阻止模式。
这取决于您使用过的操作系统如何将套接字设置为非阻塞模式。
Linux :您需要将套接字设置为非阻塞模式,如Beej's guide中所述。
Windows :您必须使用winsock WinAPI功能。
答案 1 :(得分:0)
为什么你需要它'出来'?
无论如何,说服这样一个被阻塞的线程退出的常用方法是为while循环设置一些'terminate'bool来检查然后关闭套接字。这会导致套接字读取提前返回错误。
答案 2 :(得分:0)
除上述答案外,beej指南的新链接为: https://beej.us/guide/bgnet/html/#blocking