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

Sockets 检查套接字是否阻塞(特定于Winsock),sockets,winsock,Sockets,Winsock,可能重复: 这就是我在windows中将套接字设置为非阻塞模式的方法 unsigned long mode = is_blocking ? 0 : 1; int ret = ::ioctlsocket(m_Socket, FIONBIO, &mode); 无符号长模式=是否阻塞?0 : 1; int-ret=::ioctlsocket(m_-Socket、FIONBIO和mode); 在我的复杂库中,我偶尔会遇到锁,因为传递给它的一些套接字没有设置为非阻塞模式。所以,我想添加和断言,以便能够

可能重复:

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

unsigned long mode = is_blocking ? 0 : 1; int ret = ::ioctlsocket(m_Socket, FIONBIO, &mode); 无符号长模式=是否阻塞?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; 长arg=0; 如果((arg=fcntl(m_Socket,F_GETFL,NULL))<0{ 返回误差; } 布尔被阻塞=(arg&O_非阻塞)!=0;

那么,如何测试套接字是否在windows上阻塞呢

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

Windows没有提供任何查询套接字当前是否设置为阻塞或非阻塞的方法。

感谢您的回答,这正是我的结论,很难相信他们在普通bsd套接字上添加WSAIoctl的所有额外内容都没有列出实际有用的内容。