检查套接字是否阻塞(特定于Winsock)

时间:2010-11-20 02:14:52

标签: sockets winsock

  

可能重复:
  In Win32, is there a way to test if a socket is non-blocking?

这就是我在windows中将套接字设置为非阻塞模式的方法。

unsigned long mode = is_blocking ? 0 : 1;
int ret = ::ioctlsocket(m_Socket, FIONBIO, &mode);


在我的复杂库中,我偶尔会遇到锁,因为传递给它的一些套接字没有设置为非阻塞模式。所以,我想添加并断言能够看到从哪里传递非阻塞套接字。问题是我不知道如何测试套接字是否阻塞。



在unix上,很简单:

long arg = 0;
if((arg = fcntl(m_Socket, F_GETFL, NULL)) < 0) { 
   return ERROR;
}
bool was_blocking = (arg & O_NONBLOCK) != 0;



那么,如何测试socket是否在Windows上阻塞。

感谢

1 个答案:

答案 0 :(得分:5)

Windows不提供任何方法来查询套接字当前是设置为阻止还是非阻塞。