能力值:
( LV2,RANK:10 )
|
-
-
2 楼
网上资料说10054是微软的bug,可用如下方法解决:
DWORD dwBytesReturned = 0;
BOOL bNewBehavior = FALSE;
DWORD status;
#define SIO_UDP_CONNRESET _WSAIOW(IOC_VENDOR,12)
status = WSAIoctl(s, SIO_UDP_CONNRESET,
&bNewBehavior, sizeof(bNewBehavior),
NULL, 0, &dwBytesReturned,
NULL, NULL);
if (SOCKET_ERROR == status)
{
DWORD dwErr = WSAGetLastError();
if (WSAEWOULDBLOCK == dwErr)
{
// nothing to do
return(FALSE);
}
else
{
printf("WSAIoctl(SIO_UDP_CONNRESET) Error: %d/n", dwErr);
return(FALSE);
}
}
但是还是不行,问题依然存在
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
哪里有这么简单。。。
你要知道,socket的类型是有很多种的。比如说,传递进来的那个socket,可能是异步的(比如说消息SOCKET、或事件SOCKET、或完成端口)。
除非这个SOCKET是你自己创建的。
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
比如说,对方的socket是个消息socket,那么你要实现重定向(比如说,重定向到一个http代理),那么你除了处理wspconnect外,还需要处理WSPASyncSelect。当对方注册FD_CONNECT到窗口的时候,你在这里把窗口句柄保存起来,同时不要调用下一层的WSPASyncSelect。当你在WSPConnect处理完重定向(比如说,连接到你的HTTP代理,发送原来对方需要连接的IP,等待回应),再发送FD_CONNECT消息给那个原来你保存的窗口。
其它Select模型,事件模型、IOCP模型之类的处理方法类似。
|
|
|