c ++中的非阻塞套接字
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c ++中的非阻塞套接字相关的知识,希望对你有一定的参考价值。
我在c ++中编写客户端,客户端在两个不同的端口上获得响应。我在主线程中正在侦听一个端口,而我创建了其他线程(基于posix),如下所示:
void *receiveFunc(void *ptr)
{
try {
while ( true ) {
svr_sock << svr_data;
cout<<svr_data<<endl;
}
} catch ( SocketException& ) {}
}
但当它进入这个线程时,它永远不会出现,直到我收到了套接字上的东西。
我怎样才能克服这个问题?
答案
您的套接字处于阻止模式。
这取决于您使用的操作系统如何将套接字设置为非阻塞模式。
Linux:您需要将套接字设置为非阻塞模式,如Beej's guide中所述。
Windows:您必须使用winsock WinAPI函数。
另一答案
为什么你需要它'出来'?
无论如何,说服这种被阻止的线程退出的通常方法是为while循环设置一些'terminate'bool以检查然后关闭套接字。这会导致套接字读取提前返回并出现错误。
以上是关于c ++中的非阻塞套接字的主要内容,如果未能解决你的问题,请参考以下文章