WINXP与 WIN7 32位下,客户端使用的UDP模式,nTimeout = 10;
nErr = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeout, sizeof(nTimeout));在UDP接收的时候CCpuTimer T0;
T0.Start(); 开始计时器//----UDP socket 设置为阻塞模式接收
nRet = recvfrom(g_stNet2Can.sockDevice, (char*)byteBuffer, nBytes, 0, (struct sockaddr*)&sin, &nLen);if (nRet != nBytes)
{
nRet = WSAGetLastError();
//if (nRet != 10035)
{
TRACE(_T("UDP recvfrom error: %d - tm: %d us \n"), nRet,T0.Getus());
}
return -1;
}在没有连接的时候,或者服务器断线的时候,UDP recvfrom error: 10060 - tm: 510144 us 这个超时都在500ms以上,无论设置多少但是如果把超时设置为 1000ms,这个超时也会跟着变成1000ms以上
nErr = setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTimeout, sizeof(nTimeout));在UDP接收的时候CCpuTimer T0;
T0.Start(); 开始计时器//----UDP socket 设置为阻塞模式接收
nRet = recvfrom(g_stNet2Can.sockDevice, (char*)byteBuffer, nBytes, 0, (struct sockaddr*)&sin, &nLen);if (nRet != nBytes)
{
nRet = WSAGetLastError();
//if (nRet != 10035)
{
TRACE(_T("UDP recvfrom error: %d - tm: %d us \n"), nRet,T0.Getus());
}
return -1;
}在没有连接的时候,或者服务器断线的时候,UDP recvfrom error: 10060 - tm: 510144 us 这个超时都在500ms以上,无论设置多少但是如果把超时设置为 1000ms,这个超时也会跟着变成1000ms以上
解决方案 »
- CAsyncSocket
- 怎么读PE结构,改变exe的图标呀?
- ############ 如何实现数组的动态增加?#############
- 网上down的一个工程,编译后出现 INTERNAL COMPILER ERROR!怎么回事?高手指点
- 请问怎样把一个初始化了对象指针传递到一个全局线程函数中来?谢谢~!
- 很简单的MFC问题
- http里面的中文是怎么编码的?
- 如何实现给予对话框的程序在不同的分辨率、字体下都能实现最大化,当然对话框中的控件也要随着变化!
- class A<class B>是什么东西?
- Edit框内为什么不能输入小数点(member varible,float型不是整数)
- 如何获取当前选中的字符,如翻译软件的划词翻译功能
- c++正则匹配失效
SO_RCVTIMEO and SO_SNDTIMEO do not work on all socket operations, you should use non-blocking mode and select.The behaviour may change on different operating system configurations. On my system the connect timeouts after two times the value I set in SO_RCVTIMEO. A quick hack like setting SO_RCVTIMEO to x/2 before a connect and x after it works, but the proper solution is using select.