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

百纵科技(19元/月),美国洛杉矶10G防御服务器/洛杉矶C3机房 带金盾高防

百纵科技官网:https://www.baizon.cn/百纵科技:美国云服务器活动重磅来袭,洛杉矶C3机房 带金盾高防,会员后台可自助管理防火墙,添加黑白名单 CC策略开启低中高.CPU全系列E52680v3 DDR4内存 三星固态盘列阵。另有高防清洗!美国洛杉矶 CN2 云服务器CPU内存带宽数据盘防御价格1H1G10M10G10G19元/月 购买地址2H1G10M10G10G29元/月 购买...

无忧云:洛阳BGP云服务器低至38.4元/月起;雅安高防云服务器/高防物理机优惠

无忧云怎么样?无忧云,无忧云是一家成立于2017年的老牌商家旗下的服务器销售品牌,现由深圳市云上无忧网络科技有限公司运营,是正规持证IDC/ISP/IRCS商家,主要销售国内、中国香港、国外服务器产品,线路有腾讯云国外线路、自营香港CN2线路等,都是中国大陆直连线路,非常适合免备案建站业务需求和各种负载较高的项目,同时国内服务器也有多个BGP以及高防节点。一、无忧云官网点击此处进入无忧云官方网站二...

企鹅小屋:垃圾服务商有跑路风险,站长注意转移备份数据!

企鹅小屋:垃圾服务商有跑路风险!企鹅不允许你二次工单的,二次提交工单直接关服务器,再严重就封号,意思是你提交工单要小心,别因为提交工单被干了账号!前段时间,就有站长说企鹅小屋要跑路了,站长不太相信,本站平台已经为企鹅小屋推荐了几千元的业绩,CPS返利达182.67CNY。然后,站长通过企鹅小屋后台申请提现,提现申请至今已经有20几天,企鹅小屋也没有转账。然后,搞笑的一幕出现了:平台账号登录不上提示...

setsockopt为你推荐
bean是什么意思javabean和实体类的区别?dnf装备代码dnf超级装备 ,极品代码是什么意思?求教!createfile失败惠普机看机提示create file fail 无法进桌面youtube创始人鬼步舞创作者是谁动态图片格式动态图片是什么格式?avc是什么格式手机avc格式怎么剪辑刷ip流量请问刷流量刷IP有什么用的!上行宽带上行宽带和下行宽带什么意思wow服务器状态我电脑上的魔兽服务器状态很好.但是还是玩不起来.请问可以玩了不?音乐代码在html中插入mp3音频的代码是什么
老域名全部失效请记好新域名 域名商 主机 tier isatap nerd 20g硬盘 美国仿牌空间 好看的桌面背景大图 美国php空间 512m内存 卡巴斯基永久免费版 asp免费空间申请 亚马逊香港官网 cn3 台湾google 空间登入 深圳域名 如何登陆阿里云邮箱 广州服务器托管 更多