Socket通讯接收10054?

vivian苹果 2013-05-31 06:40:36
缘由:因考虑ACE的可移植性平台,所以使用ACE来进行通讯。目前客户端与服务器端粘包时,客户端总是接收报错10054,经过csdn,微软自提供解决方案,在socket连接前,贴上以下代码即可规避10054。

----------------------------------
     DWORD dwBytesReturned=0;
BOOL bNewBehavior=FALSE;
DWORD status;
status = WSAIoctl(PrimaryUDP, 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);
}
}

----------------------------------

问题:因为本人是ACE新手,所以对于WSAIoctl函数的第1个参数不知如何填写,因为不知道如何找出ACE_SOCK_Stream内部的socket。原大虾们帮忙看看。
附使用代码:
----------------------------------
 ACE_SOCK_Stream *pSock = new ACE_SOCK_Stream();

DWORD dwBytesReturned=0;
BOOL bNewBehavior=FALSE;
DWORD status;
status = WSAIoctl( pSock->get_handle()
, 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 NULL;
}
else
{
printf("WSAIoctl(SIO_UDP_CONNRESET) Error: %d\\n", dwErr);
return NULL;
}
}

if(!ConnSrv(pSock,_ipAddr,_port))
{
delete pSock;
pSock=NULL;

_validateSign = false;

delete[] recvbuf;
recvbuf = NULL;

LC_PubFunValue::setSysState(4, "1");
_cErrorCode = "APP0027";

response->setRetCode("APP0027");
return response;
}

----------------------------------
...全文
183 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hshibin 2013-07-11
  • 打赏
  • 举报
回复
不懂。表示关注。我也一直出现10054错误,不知道如何解决呢。
z8323664 2013-06-01
  • 打赏
  • 举报
回复
UDP???
vivian苹果 2013-06-01
  • 打赏
  • 举报
回复
TCP
vivian苹果 2013-05-31
  • 打赏
  • 举报
回复
WSAIoctl( 未填         , SIO_UDP_CONNRESET,         &bNewBehavior, sizeof(bNewBehavior),         NULL, 0, &dwBytesReturned,         NULL, NULL); 如何在利用ACE通讯的基础之上填写该函数第1个参数呢
vivian苹果 2013-05-31
  • 打赏
  • 举报
回复
谢谢你的代码,但是本人想知道如何获取 ACE_SOCK_Stream 中的ACE_SOCKET,因为ACE对它进行了另定义: typedef ACE_HANDLE ACE_SOCKET;
Eleven 2013-05-31
  • 打赏
  • 举报
回复
引用 1 楼 ShengFei01 的回复:
10054应该是阻塞吧,之后通过select中的参数可以判断什么时候可读。这有很多socket例子,你可以看看: http://download.csdn.net/detail/geoff08zhang/4571358
WSAECONNRESET (10054) Connection reset by peer. A existing connection was forcibly closed by the remote host. This normally results if the peer application on the remote host is suddenly stopped, the host is rebooted, or the remote host used a "hard close" (see setsockopt for more information on the SO_LINGER option on the remote socket.)
ShengFei01 2013-05-31
  • 打赏
  • 举报
回复
10054应该是阻塞吧,之后通过select中的参数可以判断什么时候可读。这有很多socket例子,你可以看看: http://download.csdn.net/detail/geoff08zhang/4571358

18,356

社区成员

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

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