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

Pav*_*l P 4 sockets winsock

可能重复:
在Win32中,有没有办法测试套接字是否是非阻塞的?

这就是我在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上阻塞.

谢谢

Rem*_*eau 5

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