将程序设置为非阻塞模式,服务端调用accept函数之后不会导致程序暂停(这个是对的)
但是每次调用后无法判断accept函数是否捕获到了一个连接请求
在百度百科中说有这样二个错误:
WSAEMFILE:调用accept()时队列为空,无可用的描述字。
WSAENOTSOCK:描述字不是一个套接口。
于是我就这样写了
abc=accept(taolian,(SOCKADDR*)&duihua,&len);
if(WSAGetLastError()==WSAEMFILE || WSAGetLastError()==WSAENOTSOCK)
{
MessageBox("","",MB_OK);//弹出这个说明这次没有获取到连接请求
}
但是无论是否有连接,if语句块都不为真,因此无法判断"abc"是否可以recv和send了
我想问下:如何在非阻塞accept函数调用之后判断新的SOCKET连接是否有效?
7 个解决方案
#1
尽量避免使用select模型
#2
http://blog.csdn.net/yjgx007/archive/2005/01/03/237955.aspx
友情up~~~~
友情up~~~~
#3
在阻塞模式下,调用accept会阻塞,直到有连接进来或者有错误发生。
你的情况应该是使用了非阻塞模式,在这种情况下,accept会立刻返回,而不管是否有连接,因此在非阻塞模式时,
最好采用select,然后等待连接事件,当有连接时,再使用accept。
你的情况应该是使用了非阻塞模式,在这种情况下,accept会立刻返回,而不管是否有连接,因此在非阻塞模式时,
最好采用select,然后等待连接事件,当有连接时,再使用accept。
#4
我确实使用了非阻塞,我现在就是想在不使用select的情况下直接调用accept,而且还要知道这次调用有没有成功建立连接(也就是说要知道有没有连接请求)
#5
现在我改成阻塞模式,奇怪的是在没有连接请求的情况下,程序还是不会停留在accept函数
#6
问题解决了,结帖
#7
不行啊,select无法检测 是否是有效的连接啊
#1
尽量避免使用select模型
#2
http://blog.csdn.net/yjgx007/archive/2005/01/03/237955.aspx
友情up~~~~
友情up~~~~
#3
在阻塞模式下,调用accept会阻塞,直到有连接进来或者有错误发生。
你的情况应该是使用了非阻塞模式,在这种情况下,accept会立刻返回,而不管是否有连接,因此在非阻塞模式时,
最好采用select,然后等待连接事件,当有连接时,再使用accept。
你的情况应该是使用了非阻塞模式,在这种情况下,accept会立刻返回,而不管是否有连接,因此在非阻塞模式时,
最好采用select,然后等待连接事件,当有连接时,再使用accept。
#4
我确实使用了非阻塞,我现在就是想在不使用select的情况下直接调用accept,而且还要知道这次调用有没有成功建立连接(也就是说要知道有没有连接请求)
#5
现在我改成阻塞模式,奇怪的是在没有连接请求的情况下,程序还是不会停留在accept函数
#6
问题解决了,结帖
#7
不行啊,select无法检测 是否是有效的连接啊