检查recv是否正在运行

时间:2015-11-17 16:42:50

标签: c multithreading sockets winsock

我有一个服务器程序,它为它接受的每个连接创建一个新线程。此线程中调用的函数始终相同。它有一个无限do...while语句,可以回复收到的任何数据。此外,我正在使用阻塞模式套接字,因此recv阻塞线程的事实是预期和令人满意的。

我的问题是,有时程序的主线程需要检查套接字的连接状态(或网络连接状态)。

我已经阅读了很多关于这个问题但在阻塞模式套接字上没有发现任何内容;但我发现了非阻塞套接字的问题(使用recv,如下所述):

char buf;
int recResult=recv(sock,&buf,1,MSG_PEEK);

此函数发送1个字节的数据并返回该值。通过此值和WSAGetLastError()函数,我们可以检查连接的状态。

但是我担心当我调用检查套接字状态的函数时,recv函数可能正在其他线程上运行。如果我更改套接字阻塞模式,它可以返回错误值并将其自己的值“设置”为WSAGetLastError()函数。

所以我的问题是如何检查recv是否在另一个主题上运行。

我经常搜索,但一无所获。此外,我还没有发现更改阻止模式是否会影响recv,以及它是否为WSA错误设置了自己的值。

P.S。:是的,我知道我可以在我的线程上检查recv的结果,但我需要检查它是否从另一个线程运行,而不是找到它的结果。

0 个答案:

没有答案