端口转发程序出错,请懂的人指点一下。

annhf 2013-06-25 05:58:29
以下源码是端口转发程序,数据转发的源码,在转发时小数据不会出现问题,但是在大数据时程序程序会出错,显示错误信息为WARN:Close socket.不知道为什么,请各位大虾指点。如果分数不够可以增加。

DWORD WINAPI TranslateData(LPVOID pvParam)
{
STACK<SOCKS> *SocketData = (STACK<SOCKS>*)pvParam;
SOCKS AccAndMapSocket = SocketData->Pop();
WSAEVENT hEvents[2];
hEvents[0] = WSACreateEvent();
hEvents[1] = WSACreateEvent();
if (WSAEventSelect(AccAndMapSocket.AccSocket, hEvents[0], FD_READ | FD_CLOSE))
{
printf("ERROR:WSAEventSelect 1 error.\r\n");
goto error;
}
if (WSAEventSelect(AccAndMapSocket.MapSocket, hEvents[1], FD_READ | FD_CLOSE))
{
printf("ERROR:WSAEventSelect 2 error.\r\n");
goto error;
}
while (1)
{
WaitForMultipleObjects(2, hEvents, false, INFINITE);
WSANETWORKEVENTS WsaEvents[2];
WSAEnumNetworkEvents(AccAndMapSocket.AccSocket, hEvents[0], &WsaEvents[0]);
WSAEnumNetworkEvents(AccAndMapSocket.MapSocket, hEvents[1], &WsaEvents[1]);
int nRecv, nSend;
char buff[8192];
if (WsaEvents[0].lNetworkEvents & FD_READ)
{
nRecv = recv(AccAndMapSocket.AccSocket, buff, sizeof(buff), 0);
nSend = send(AccAndMapSocket.MapSocket, buff, nRecv, 0);
if (nRecv == SOCKET_ERROR || nSend == false)
{
printf("ERROR:Translate listen socket data error.\r\n");
break;
}
}
if (WsaEvents[1].lNetworkEvents & FD_READ)
{
nRecv = recv(AccAndMapSocket.MapSocket, buff, sizeof(buff), 0);
nSend = send(AccAndMapSocket.AccSocket, buff, nRecv, 0);
if (nRecv == SOCKET_ERROR || nSend == false)
{
printf("ERROR:Translate listen socket data error.\r\n");
break;
}
}
if ((WsaEvents[0].lNetworkEvents & FD_CLOSE) || (WsaEvents[1].lNetworkEvents & FD_CLOSE))
{
printf("WARN:Close socket.\r\n");
break;
}
}
error:
g_nAcceptCount--;
closesocket(AccAndMapSocket.AccSocket);
closesocket(AccAndMapSocket.MapSocket);
return 0;
}
...全文
107 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧