Windows TCP套接字recv延迟
发布时间:2020-12-14 05:42:08 所属栏目:Windows 来源:网络整理
导读:外部控制器每30ms通过TCP / IP套接字发送120字节的消息. 应用程序通过标准的tcp / ip socket recv函数接收此消息. 它在 Linux OSX(recv每30ms返回120个字节的消息). 在Windows下,recv大约每1秒返回~3500字节缓冲区.其余时间它返回0. Windows下的Wireshark显
外部控制器每30ms通过TCP / IP套接字发送120字节的消息.
应用程序通过标准的tcp / ip socket recv函数接收此消息. 它在 Linux& OSX(recv每30ms返回120个字节的消息). 在Windows下,recv大约每1秒返回~3500字节缓冲区.其余时间它返回0. Windows下的Wireshark显示每隔30ms就会发送一次消息. 如何让windows tcp socket正常工作(没有延迟)? PS:我玩过TCP_NODELAY& TcpAckFrequency已经. Wireshark显示一切正常.所以我认为这是一些Windows优化,应该关闭. 读 – int WMaster::DataRead(void) { if (!open_ok) return 0; if (!CheckSocket()) { PrintErrNo(); return 0; } iResult = recv(ConnectSocket,(char *)input_buff,sizeof(input_buff),0); nError=WSAGetLastError(); if(nError==0) return iResult; if(nError==WSAEWOULDBLOCK) return iResult; PrintErrNo(); return 0; } 初始化- ConnectSocket = INVALID_SOCKET; iResult = WSAStartup(MAKEWORD(2,2),&wsaData); ConnectSocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); ZeroMemory(&clientService,sizeof(clientService)); clientService.sin_family = AF_INET; clientService.sin_addr.s_addr = inet_addr( deviceName.toLatin1().constData() ); clientService.sin_port = htons( port); iResult = setsockopt(ConnectSocket,IPPROTO_TCP,TCP_NODELAY,(char *) &flag,sizeof (int)); u_long iMode=1; iResult=ioctlsocket(ConnectSocket,FIONBIO,&iMode); iResult = ::connect( ConnectSocket,(SOCKADDR*) &clientService,sizeof(clientService) ); CheckSocket – bool WMaster::CheckSocket(void) { socklen_t len = sizeof (int); int retval = getsockopt (ConnectSocket,SOL_SOCKET,SO_ERROR,(char*)(&valopt),&len ); if (retval!=0) { open_ok=false; return false; }; return true; } 解决方法
考虑禁用Nagle算法. 120字节非常小,可能在发送之前缓冲数据.我认为是Nagle算法的另一个原因是大约33次发送应该在1秒内发生.这相当于33 * 120 = 3960字节/秒非常类似于您所看到的3500.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows – 阻止手动睡眠的SetThreadExecutionState
- windows – 批量循环使用预定义列表或扩展集的所有文件,并忽
- Windows键击/组合你不能没有
- 在Windows和Silverlight类库之间共享C#代码
- 常用模块-configparser模块-配置文件格式
- Windows服务 – Visual Studio 11 BETA中不支持Windows Ins
- 仅为共享访问创建Windows帐户
- windows-server-2008 – 主动/主动与主动/被动群集
- 为什么我的编辑控件在我的win32 c应用程序中看起来很奇怪而
- windows-server-2008 – 防止Microsoft FTP服务器(IIS6 / 7
推荐文章
站长推荐
热点阅读