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; }

Megalayer(月599元)限时8月香港和美国大带宽服务器

第一、香港服务器机房这里我们可以看到有提供四个大带宽方案,是全向带宽和国际带宽,前者适合除了中国大陆地区的全网地区用户可以用,后者国际带宽适合欧美地区业务。如果我们是需要大陆地区速度CN2优化的,那就需要选择常规的优化带宽方案,参考这里。CPU内存硬盘带宽流量价格选择E3-12308GB240GB SSD50M全向带宽不限999元/月方案选择E3-12308GB240GB SSD100M国际带宽不...

青果网络618:洛杉矶CN2 GIA/东京CN2套餐年付199元起,国内高防独服套餐66折

青果网络怎么样?青果网络隶属于泉州市青果网络科技有限公司,青果网络商家成立于2015年4月1日,拥有工信部颁发的全网IDC/ISP/IP-VPN资质,是国内为数不多具有IDC/ISP双资质的综合型云计算服务商。青果网络是APNIC和CNNIC地址分配联盟成员,泉州市互联网协会会员单位,信誉非常有保障。目前,青果网络商家正式开启了618云特惠活动,针对国内外机房都有相应的优惠。点击进入:青果网络官方...

Webhosting24:$1.48/月起,日本东京NTT直连/AMD Ryzen 高性能VPS/美国洛杉矶5950X平台大流量VPS/1Gbps端口/

Webhosting24宣布自7月1日起开始对日本机房的VPS进行NVMe和流量大升级,几乎是翻倍了硬盘和流量,价格依旧不变。目前来看,日本VPS国内过去走的是NTT直连,服务器托管机房应该是CDN77*(也就是datapacket.com),加上高性能平台(AMD Ryzen 9 3900X+NVMe),还是有相当大的性价比的。此外在6月30日,又新增了洛杉矶机房,CPU为AMD Ryzen 9...

setsockopt为你推荐
mergefield邮件合并日期,想让电子表格中的日期格式与WORD中的日期格式一致暴力破解rar暴力破解rar,一个15位左右的密码,得用多长时间。(双核。2g内存)手机软件开发工具如何自己开发一个app软件5e5e5e计算器里5.55556e-5是什么意思shoujiao手机电池突然充不上电,是怎么回事?该怎么办?java程序员招聘Java程序员,一般招聘都要求些啥gas是什么意思petrol和gas的区别ocr软件下载如何安装汉王ocr文字识别软件gbk内码怎么查GBK内码?怎样删除聊天记录自己已发出的微信聊天记录怎样删除才不会让对方看见
虚拟主机排名 linode日本 国外php主机 webhosting 监控宝 商家促销 网通代理服务器 789电视剧 申请免费空间和域名 360云服务 带宽租赁 云服务器比较 域名和主机 谷歌搜索打不开 japanese50m咸熟 空间排行榜 alexa搜 木马检测 极域网 更多