setsockopt怎样用setsockopt重新设置SOCKET缓冲区的大小

setsockopt  时间:2021-06-19  阅读:()

setsockopt()的用法

⒈设置调用closesocket()后,仍可继续重用该socket。

调用closesocket()一般不会立即关闭socket,而经历TIME_WAIT的过程。

BOOL bReuseaddr = TRUE; setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); ⒉ 如果要已经处于连接状态的soket在调用closesocket()后强制关闭,不经历TIME_WAIT的过程: BOOL bDontLinger = FALSE; setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); ⒊在send(),recv()过程中有时由于网络状况等原因,收发不能预期进行,可以设置收发时限: int nNetTimeout = 1000; //1秒 //发送时限 setsockopt(socket,SOL_SOCKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //接收时限 setsockopt(socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); ⒋在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节(异步);系统默认的状态发送和接收一次为8688字节(约 为8.5K);在实际的过程中如果发送或是接收的数据量比较大,可以设置socket缓冲区,避免send(),recv()不断的循环收发: // 接收缓冲区 int nRecvBuf = 32 * 1024; //设置为32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); //发送缓冲区 int nSendBuf = 32*1024; //设置为32K setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); ⒌在发送数据的时,不执行由系统缓冲区到socket缓冲区的拷贝,以提高程序的性能: int nZero = 0; setsockopt(socket,SOL_SOCKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); ⒍在接收数据时,不执行将socket缓冲区的内容拷贝到系统缓冲区: int nZero = 0; setsockopt(s,SOL_SOCKET,SO_RCVBUF,(char *)&nZero,sizeof(int)); ⒎一般在发送UDP数据报的时候,希望该socket发送的数据具有广播特性: BOOL bBroadcast = TRUE; setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL)); ⒏在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可以设置connect()延时,直到pet()被调用(此设置只 有在非阻塞的过程中有显著的作用,在阻塞的函数调用中作用不大) BOOL ept = TRUE; setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&ept,sizeof(BOOL)); ⒐如果在发送数据的过程中send()没有完成,还有数据没发送,而调用了closesocket(),以前一般采取的措施是shutdown(s,SD_BOTH),但是数 据将会丢失。

某些具体程序要求待未发送完的数据发送出去后再关闭socket,可通过设置让程序满足要求: struct?linger?{??u_short?l_onoff;??u_short?l_linger;};linger?m_sLinger;m_sLinger.l_onoff?=?1;//在调用closesocket()时还有数据未发送完,允许等待//若m_sLinger.l_onoff=0;则调用closesocket()后强制关闭m_sLinger.l_linger?=?5;?//设置等待时间为5秒setsockopt(s,?SOL_SOCKET,?SO_LINGER,????(const?char*)&m_sLinger,sizeof(linger));参见: bind(),getsockopt(),ioctlsocket(),socket(),WSAAsyncSelect().

windows下怎么将recv设置成非阻塞setsockopt

IP_HDRINCL选项需要administrator权限,或者修改注册表:HKEY_LOCAL_MACHINESystemCurrentControlSetServicesAfdParameterDisableRawSecurity(类型为DWORD),把值修改为 1。

如果没有,就添加DisableRawSecurity并将其值设置为1.

怎样用setsockopt重新设置SOCKET缓冲区的大小

// 这段代码是改变接系统接收缓冲区大小。

每次可以从另一端接收数据大小变大。

int nBufLen; int nOptlLen; nErrCode = getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*)nBufLen, &nOptlLen); if (SOCKET_ERROR == nErrCode) { return EXIT_FAILURE; } nBufLen *= 10; nErrCode = setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*)&nBufLen, nOptlLen); if (SOCKET_ERROR == nErrCode) { return EXIT_FAILURE; } // 检查设置系统接收数据缓冲区是否成功 int uiNewRcvBuf; int nOptLen; getsockopt(s, SOL_SOCKET, SO_RCVBUF, (char*)uiNewRcvBuf, &nOptLen); if (SOCKET_ERROR == nErrCode || uiNewRcvBuf != nBufLen) { return EXIT_FAILURE; } // 这一段,是更改发送缓冲区大小,使我们每次可以发送比较大的数据。

unsigned int uiOldSize = 0; unsigned int uiNewSize = 0; int uiRcvBufLen = 0; if((uiOldSize = GetSysBuffSize(inSocket)) == 0) { // 获取缓冲大小失败 return false; } uiRcvBufLen = sizeof(uiBuffSize); if (SOCKET_ERROR == setsockopt(inSocket, SOL_SOCKET, SO_SNDBUF, (char*)&uiBuffSize, uiRcvBufLen)) { // 修改系统缓冲区大小失败 return false; } // 检查设置系统发送缓冲区是否成功 uiRcvBufLen = sizeof(uiNewSize); if (SOCKET_ERROR == getsockopt(inSocket, SOL_SOCKET, SO_SNDBUF, (char*) &uiNewSize, &uiRcvBufLen) || uiNewSize == uiOldSize) { // 修改系统发送缓冲区失败 return false; }

易探云香港云服务器价格多少钱1个月/1年?

易探云怎么样?易探云是目前国内少数优质的香港云服务器服务商家,目前推出多个香港机房的香港云服务器,有新界、九龙、沙田、葵湾等机房,还提供CN2、BGP及CN2三网直连香港云服务器。近年来,许多企业外贸出海会选择香港云服务器来部署自己的外贸网站,使得越来越多的用户会选择易探云作为网站服务提供平台。今天,云服务器网(yuntue.com)小编来谈谈易探云和易探云服务器怎么样?具体香港云服务器多少钱1个...

Digital-VM80美元新加坡和日本独立服务器

Digital-VM商家的暑期活动促销,这个商家提供有多个数据中心独立服务器、VPS主机产品。最低配置月付80美元,支持带宽、流量和IP的自定义配置。Digital-VM,是2019年新成立的商家,主要从事日本东京、新加坡、美国洛杉矶、荷兰阿姆斯特丹、西班牙马德里、挪威奥斯陆、丹麦哥本哈根数据中心的KVM架构VPS产品销售,分为大硬盘型(1Gbps带宽端口、分配较大的硬盘)和大带宽型(10Gbps...

ShineServers(5美元/月)荷兰VPS、阿联酋VPS首月五折/1核1G/50GB硬盘/3TB流量/1Gbps带宽

优惠码50SSDOFF 首月5折50WHTSSD 年付5折15OFF 85折优惠,可循环使用荷兰VPSCPU内存SSD带宽IPv4价格购买1核1G50G1Gbps/3TB1个$ 9.10/月链接2核2G80G1Gbps/5TB1个$ 12.70/月链接2核3G100G1Gbps/7TB1个$ 16.30/月链接3核4G150G1Gbps/10TB1个$ 18.10/月链接阿联酋VPSCPU内存SS...

setsockopt为你推荐
prisma安卓版Prisma安卓版能不能用youtube创始人卜秋静 有关生平介绍网络视频下载器网络视频下载工具哪个好用?刷ip流量一天可以刷一万IP流量的软件broadcast播播……拼音netbios协议NetBIOS协议起什么作用?sms是什么短信验证是什么?怎样删除聊天记录如何删除和一个人的聊天记录?微盟价格微盟现在怎么样?西安娱乐西安市最刺激好玩的娱乐场所是哪里?
电信服务器租用 日本vps 万网域名解析 过期域名抢注 mach5 韩国加速器 163网 贵州电信宽带测速 一元域名 150邮箱 老左正传 傲盾官网 个人免费主页 根服务器 starry 阿里云免费邮箱 全能空间 群英网络 如何登陆阿里云邮箱 windowsserverr2 更多