2010-11-20 37 views
4

可能重复:
In Win32, is there a way to test if a socket is non-blocking?检查是插座阻止(Winsock的具体)

这是我如何设置套接字非阻塞模式的窗口。

 
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; 



所以,我怎么能测试,如果插座阻塞窗口。

感谢

回答

5

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

+0

感谢您的回答,这正是我的结论,很难相信,在纯bsd套接字之上的WSAIoctl的所有额外功能都没有列出实际上可能有用的内容。 – Pavel 2010-11-29 18:55:16