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;
}
georgedatacenter怎么样?GeorgeDatacenter是一家2017年成立的美国商家,正规注册公司(REG: 10327625611),其实是oneman。现在有优惠,有几款特价VPS,基于Vmware。支持Paypal付款。GeorgeDatacenter目前推出的一款美国vps,2核/8GB内存/250GB NVMe空间/2TB流量/1Gbps端口/Vmware/洛杉矶/达拉...
飞讯云官网“飞讯云”是湖北飞讯网络有限公司旗下的云计算服务品牌,专注为个人开发者用户、中小型、大型企业用户提供一站式核心网络云端部署服务,促使用户云端部署化简为零,轻松快捷运用云计算。飞讯云是国内为数不多具有ISP/IDC双资质的专业云计算服务商,同时持有系统软件著作权证书、CNNIC地址分配联盟成员证书,通过了ISO27001信息安全管理体系国际认证、ISO9001质量保证体系国际认证。 《中华...
轻云互联怎么样?轻云互联,广州轻云网络科技有限公司旗下品牌,2018年5月成立以来,轻云互联以性价比的价格一直为提供个人,中大小型企业/团队云上解决方案。本次轻云互联送上的是美国圣何塞cn2 vps(免费50G集群防御)及香港沙田cn2 vps(免费10G集群防御)促销活动,促销产品均为cn2直连中国大陆线路、采用kvm虚拟技术架构及静态内存。目前,轻云互联推出美国硅谷、圣何塞CN2GIA云服务器...
setsockopt为你推荐
订房系统酒店管理系统包括哪些子系统暴力破解rar怎么暴力破解rar密码?快速且有效的listviewitem求解如何获取listview中的itemshoujiao手机电池突然充不上电,是怎么回事?该怎么办?flash序列号Flash软件 的序列号是什么?validdate怎样解决oracle报错is not a valid date and time西安娱乐西安那里有好玩的地方,夜生活不去如何查看qq特别关心我的人手机qq怎么看有多少个人把自己设置为特别关心怎么保存整个网页怎样完整的保存一个网页driversbackup电脑里有个“Backup”文件夹是干什么的
中文国际域名 俄罗斯vps oneasiahost cdn服务器 紫田 免费phpmysql空间 上海联通宽带测速 超级服务器 什么是web服务器 东莞主机托管 服务器防火墙 腾讯网盘 阿里云邮箱申请 北京主机托管 架设代理服务器 web服务器 web是什么意思 WHMCS shuangshiyi 留言板 更多