recvfrom vs2010 debug正常 realse错误10040

学习socket程序,udp多播发送和接收。其中一个接收recvfrom函数。在debug能正常运行,在release无法运行

,总是提示10040错误,查询百度,说是接收缓存区不够。下面是程序代码:

void MultiSock::RecvPacket(void)
{
MessageBox(NULL,TEXT("開始接收多播組192.168.5.226上的數據"),TEXT("接收"),MB_OK);
char buf[1028];
char err[10];
int nAddrLen = sizeof(si);
while(TRUE)
{
int nRet = ::recvfrom(s,buf,strlen(buf),0,(sockaddr*)&si,&nAddrLen);
if (nRet != SOCKET_ERROR)
{
buf[nRet]='\0';
MessageBox(NULL,buf,TEXT("數據"),MB_OK);
}
else
{
int n=::WSAGetLastError();
itoa(n,err,10);
MessageBox(NULL,err,TEXT("數據"),MB_OK);
break;
}
}


}

思来想去,后面还用

       int nRecvBuf=32*1024;
setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int));
int nSendBuf=32*1024;
setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int));

专门调大缓冲区,也无济于事。后面想想还是recvfrom错误。认真再看看代码,发现接收

缓存区大小recvfrom实际为strlen(buf)。于是用memset(buf,0,1028)初始化。还是不行。

后来干脆直接把strlen(buf)换为数字1028,结果OK。 看来在debug和release下,strlen(buf)

的结果是有区别的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值