SOCKET中listen函数第二个参数无效?
时间:2011-12-13
来源:互联网
This function places a socket at a state where it is listening for an incoming connection.
int listen(
SOCKET s,
int backlog
);
Parameters
s
[in] Descriptor identifying a bound, unconnected socket.
backlog
[in] Maximum length of the queue of pending connections. If backlog is set to SOMAXCONN, the underlying service provider responsible for socket s will set the backlog to a maximum reasonable value. There is no standard provision to obtain the actual backlog value.
backlog:意思是否表示此socket最多可以链接的数量?
我发现,我无论把这个参数设置成1,但是却可以同时被多个client链接。
程序的主要实现:
线程A:
while循环调用accept。
这个函数返回之后,如果没有错误;
就再创建一个线程,把这个返回的SOCKET的地址传到下一个线程B。
线程B:(线程B可以被创建很多个)
专门负责recv那个SOCKET的数据。
然后处理数据。
我遇到的问题有2个。
1:listen设置的最大连接数,无效。
2:当我用一个client,不停的链接server,并且只发一段字符,就关闭socket的时候。
server端的accept就会一直返回并且都没有错误。
然后线程就会一直的被创建,销毁。
但是线程创建销毁消耗的时间,远比client链接,发送,关闭的多的多。
所以server就会不堪重负。这个问题,怎么解决?
还是我设计的这个多连接本身就有问题。
作者: cobra_chen 发布时间: 2011-12-13
那个数表示的是连接等待队列大小,即已经完成3次握手,但还有有从队列中取出的连接数据
调用accept之后就将连接从等待队列中取出了
你可以把那个数设置成1, 然后不调用accept,看看这时候可以有几次connect成功
调用accept之后就将连接从等待队列中取出了
你可以把那个数设置成1, 然后不调用accept,看看这时候可以有几次connect成功
作者: mayudong1 发布时间: 2011-12-13
但还有有从队列中取出的连接数据 = 但还没有从队列中取出的连接数据
作者: mayudong1 发布时间: 2011-12-13
第二个问题可以搜索一下socket io模式,有多种解决办法
作者: mayudong1 发布时间: 2011-12-13
这句可以解释一下不?
没听懂。
没听懂。
引用 2 楼 mayudong1 的回复:
但还有有从队列中取出的连接数据 = 但还没有从队列中取出的连接数据
但还有有从队列中取出的连接数据 = 但还没有从队列中取出的连接数据
作者: cobra_chen 发布时间: 2011-12-13
引用 4 楼 cobra_chen 的回复:
这句可以解释一下不?
没听懂。
引用 2 楼 mayudong1 的回复:
但还有有从队列中取出的连接数据 = 但还没有从队列中取出的连接数据
这句可以解释一下不?
没听懂。
引用 2 楼 mayudong1 的回复:
但还有有从队列中取出的连接数据 = 但还没有从队列中取出的连接数据
哈哈,表示我上面打错了,下面更正
但是还没有从等待队列中取出的连接
作者: mayudong1 发布时间: 2011-12-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28