win10socket返回值小于零

win10设置socket缓冲区

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;

}

win10设置socket缓冲区

2.怎样用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;

}

3.windows socket error:由于系统缓冲区空间不足,阻止以上的操作

这个问题并不直观,并且很难检查。因为,乍一看,它很像普通的死锁,或者内存泄露。假设你已经弄好了你的服务器并且能够很好的运行。当你对服务器进行承受力测试的时候,它突然挂机了。如果你幸运,你会发现这和wsaenobufs出错有关。

伴随着每一次的重叠发送和接收操作,有数据的内存提交可能会被加锁。当内存被锁定时,它不能越过物理内存页。操作系统会强行为能够被锁定的内存的大小设定一个上限。当达到上限时,重叠操作将失败,并发送wsaenobufs错误。

假如一个服务器在在每个连接上提供了很多重叠接收,随着连接数量的增长,很快就会达到这个极限。如果服务器能够预计到要处理相当多的并发客户端的话,服务器可以在每个连接上仅仅回复一个0字节的接收。这是因为没有接收操作和内存无关,内存不需要被锁定。利用这个方法,每一个套接字的接收内存都应该被完整的保留,这是因为,一旦0字节的接收操作完成,服务器仅仅为套接字的接收内存的所以数据内存返回一个非阻塞的接收。利用wsaewouldblock,当非阻塞接收失败时,也没有数据被阻塞。这种设计的目的是,在牺牲数据吞吐量的情况下,能够处理最大量的并发连接。当然,对于客户端如何和服务器交互,你知道的越多越好。在以前的例子中,每当0字节的接收完成,返回存储了的数据,马上执行非阻塞接收。假如服务器知道客户端突然发送数据,当0字节接收一旦完成,为防止客户端发送一定数量的数据(大于每个套接字默认的8k内存大小),它可以投递一个或多个重叠接收。

win10设置socket缓冲区

转载请注明出处windows之家 » win10socket返回值小于零

win10

笔记本win10截图设置键

阅读(3527)

本文主要为您介绍笔记本win10截图设置键,内容包括笔记本电脑按什么键可以截屏,win10的,win10快捷截屏怎么设置,win10笔记本任意截图键。截取全屏 自动保存组合键 同时按住Windows+Print Screen组合键,笔记本则按住Windows+Prt Sc SysRq按

win10

win10怎么设置多个背景

阅读(2078)

本文主要为您介绍win10怎么设置多个背景,内容包括如何在win10中使用多个背景,如何在win10中使用多个背景,win10双桌面怎么设置两个不同的壁纸。直接定位到自己想要设置壁纸的图片文件夹小编一般会把图片先放到电脑默认的壁纸文件夹里默认壁

win10

win10保护眼睛设置不改注册表

阅读(2044)

本文主要为您介绍win10保护眼睛设置不改注册表,内容包括word设置的护眼色时有时无,win10系统,用的修改注册表编辑器的办,win10电脑的护眼模式怎么设置,win10护眼模式怎么取消?。Word文档底色设为护眼色步骤: 电脑桌面,右键,点击个性化。 2、点

win10

win10非让我设置苹果手机

阅读(2217)

本文主要为您介绍win10非让我设置苹果手机,内容包括win10找不到iphone手机,怎么回事,升级win10后,电脑无法识别苹果手机!已经试过网上的一些方法,都,非要用苹果电脑相应的操作系统上才能完成开发吗!?!在别的win7。远程桌面连过去报如下错误

win10

win10点蓝牙设置闪退

阅读(1759)

本文主要为您介绍win10点蓝牙设置闪退,内容包括win10打开蓝牙设置闪退,win10蓝牙故障,图标什么的都在,但是打不开蓝牙设置,打开的白,我的电脑是win8系统,蓝牙用不了,设置里一点蓝牙就闪退。1.打开设备并使其可发现。使其可发现的方式取决于

win10

win10酷狗热键设置

阅读(1857)

本文主要为您介绍win10酷狗热键设置,内容包括电脑酷狗输入法怎么设置快捷键?,电脑酷狗输入法怎么设置快捷键?,电脑上有控制音乐的键,酷狗怎么设定?。2015酷狗音乐播放器默认快捷键:播放/暂停:Alt+F5上一首:Alt+Left(左箭头)下一首:Alt+ Right(右箭

win10

win10如何设置定时唤醒

阅读(2078)

本文主要为您介绍win10如何设置定时唤醒,内容包括Win10怎么设置定时开关机休眠唤醒,Win10怎么设置定时开关机休眠唤醒,Win10进入睡眠后怎么设置自动定时唤醒。首先查看电脑的休眠功能是否开启,如果没有需要先开启计算机的休眠功能(注意是“休

win10

win10设置更新在哪

阅读(2036)

本文主要为您介绍win10设置更新在哪,内容包括win10的更新在哪里?怎么设置,win10系统如何更新,更新按钮在哪儿,win10系统更新在哪。Win10系统关闭自动更新功能步骤方法:按WIN+R打开运行,输入services.msc回车然后找到“Windowsupdata”服务

win10

win10处理器个数怎么设置

阅读(2308)

本文主要为您介绍win10处理器个数怎么设置,内容包括win10怎么开启cpu核心数,W10cpu核数怎么修改,win10在任务管理器怎么改应用程序的cpu占用数目。网络上的各种伪技巧多得很,而这个就是比较典型的。在Win7帮助文件中对于msconfig的高级引导

win10

win10如何将任务栏设置成透明

阅读(2038)

本文主要为您介绍win10如何将任务栏设置成透明,内容包括Win10任务栏怎么设置透明,win10电脑任务栏怎么变透明,win10怎么设置任务栏透明。工具:win10方法如下:首先打开操作系统,进入桌面,如下所示,可以看到操作中心和任务栏是没有透明的

win10

win10自动锁定屏幕怎么设置

阅读(3026)

本文主要为您介绍win10自动锁定屏幕怎么设置,内容包括windows10怎么设置自动锁定屏幕,Win101709如何设置自动锁定电脑屏幕,win10电脑屏幕自动锁屏怎么设置?。在Windows10系统桌面,点击桌面左下角的开始按钮,在弹出的开始菜单中点击Windows系

win10

win10设置功能键加fn

阅读(1926)

本文主要为您介绍win10设置功能键加fn,内容包括Mac装的win10怎么设置FN键,笔记本功能键FN在哪里设置啊,怎么将戴尔快捷键设置成FN+的形式?。右下角系统托盘里面,找到bootcamp控制面板。可以在里面修改。(很简单,只有一个选项,你进去一眼就能看

win10

win10怎么给d盘设置权限

阅读(1787)

本文主要为您介绍win10怎么给d盘设置权限,内容包括如何给D盘设置权限?,win10系统D盘权限问题,win10怎么设置权限。win10怎么设置权限呢!当我们局域网里有电脑需要共享的时候怎么设置权限,这个权限有写入权限要怎么操作,如下图有解析。 方法/步

win10

win10蓝牙鼠标pin设置

阅读(2363)

本文主要为您介绍win10蓝牙鼠标pin设置,内容包括win10系统笔记本如何设置无线鼠标,win10系统怎么添加蓝牙鼠标,Win10怎么添加蓝牙鼠标。有线的直接插上即可,无线的操作方法如下:在电脑Win10系统的桌面上,点击左下角的开始菜单中的“控制面板”

win10

win10设置游戏锁帧

阅读(2558)

本文主要为您介绍win10设置游戏锁帧,内容包括Win10怎么游戏锁帧?N卡用很多软件都不行,去调垂直同步又不稳定,win10锁帧60,win10LOL锁帧60。这个问题存在很长时间了,估计还是有很多人因为这个苦恼,我说一下我的解决办法,win10版本是15063版。