由于系统缓冲区不足或队列已满,无法进行Socket连接
在用多线程进行网络编程时出现了这样的错误“由于系统缓冲区不足或队列已满,无法进行Socket连接”,如何才能解决?能不能扩大系统缓冲区? 问题点数:100、回复次数:7Top
1 楼ah__fu(阿福)回复于 2005-05-29 16:57:00 得分 30
把代码贴出来看看
你recieve的时候,最好确认只有一个线程在访问
该锁的时候把锁加上
.NET中SOCKET的缓冲区默认是8K,实际上你Recieve的时候SOCKET会自动负责填满用户缓冲区的,其他问题不用考虑Top
2 楼liwei6797(对倒二五条)回复于 2005-05-29 22:20:59 得分 0
不太明白..."SOCKET会自动负责填满用户缓冲区"是什么意思,应该把锁加在什么地方?Top
3 楼liwei6797(对倒二五条)回复于 2005-05-30 10:40:16 得分 0
顶一下
Top
4 楼meixiaofeng(yesmsn)回复于 2005-06-07 12:45:23 得分 10
NET中SOCKET的缓冲区默认是8K,谁说的?Top
5 楼TheAres(班门斧)回复于 2005-06-10 14:02:11 得分 20
回复人: ah__fu(阿福) :
...
.NET中SOCKET的缓冲区默认是8K,实际上你Recieve的时候SOCKET会自动负责填满用户缓冲区的,其他问题不用考虑.
看起来,是阿福说的了。
--------------
出现这个问题,多数是socket没有close().MSDN虽然没有说,但是TcpClient.SendBufferSize 和 receivebuffersize 都是8192.
你也可以用GetSocketOption()来得到这个数值,用SetSocketOption()来设置。
Top
6 楼TheAres(班门斧)回复于 2005-06-10 14:14:11 得分 40
索性把话说的清楚些。
楼主的问题和阿福说的buffer不是一个问题。楼主的问题应该是socket没有关闭,连接数目超过系统允许。这个数目存在注册表里,具体位置你自己找,大约在HKLM\system\***\tcpip\parameters. 不同的windwos 版本这个数目也不一样。
Top
7 楼liwei6797(对倒二五条)回复于 2005-06-14 20:11:22 得分 0
实际上我是关了的,只是线程开得太多了(100个),还没来得及关,缓冲区就满了,现在改成30个线程,基本满足要求了。Top
相关问题
- Socket缓冲区
- Windows socket error:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- Socket 多次 Open,出现错误:由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作(10055) on Api 'Connect'。我怎么能
- 求救:由于系统缓冲区空间不足或队列已满,不能执行套接字操作(10055)ON Api connet
- 关于SOCKET中的RECV和SEND缓冲区和LISTEN()的问题
- 如何清除SOCKET缓冲区的数据.
- 怎样用setsockopt重新设置SOCKET缓冲区的大小
- ========= 砸分了!!!!!!200镑啊!!!!!!!如何清除socket接收缓冲区 ===========
- 怎样取得socket缓冲区中数据的字节数?
- 有没有办法知道socket发冲缓冲区为空?




