网络编程中listen函数中的backlog最多能设置多少?

llhwjj 2011-02-16 11:07:31
网络编程中listen函数中的backlog最多能设置多少?我在用服务器短设置的时候我把它设置成10000,然而在我的接收中为什么还会是那么的慢,我也用一个客服端不间断的发送一万个sock packet,但是接收时间好长,并且在处理中有时候快有时候慢,这该怎么去处理
...全文
660 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jaylong35 2011-02-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 llhwjj 的回复:]
引用 3 楼 jaylong35 的回复:
listen只是用来开启,并设置accept队列的长度
而与客户端信息的收发没有直接关系。
收发速度只与你服务器本身的设计和数据接收处理方式有关
所以,你要改变处理速度,并不是看listen的backlog,而是要修改数据接收处理部分
就是recv部分

对于recv就是一个函数,这个接收的快慢会影响到服务器的性能吗?对于服务器这段就是一个……
[/Quote]
这个要看你怎么处理这部分数据了,一般服务器都是只接收数据,就是把数据收下来保存好,数据相关的处理放到另外开启一个线程来做,这样,就可以加快接收速度了。
你可以测试一下,只接收数据,不做其它处理时候的速度,这个才是传输速度
比如
接收数据线程
void * run(void*)
{
while(1)
{
recv(...);
processdata();
}
}
以上这样的方式,会影响你数据接收的,因为要处理好了,才会再接收。而不能一直接收。

你可以按以下来处理:

datalist;//用来保存数据的一个列表,或是其它的结构。

//接收线程
void * runrecv(void *)
{
while(1)
{
recv(...);
datalist.pushback(data);//这个只是往列表里面插入一个数据,会比处理快
}
}

//数据处理线程
void * runprocess(void *)
{
while(1)
{
//这里就省略了,总的就是从数据列表中取数据,处理。
}
}
这样,就不会因为处理数据时间过长,而影响了数据接收,这个一般都用在异步模式里面
l0vehj 2011-02-17
  • 打赏
  • 举报
回复
这个跟你接收慢没关系吧,这个只控制你没有accept的队列能保持多少个链接吧,剩下的丢弃了。
llhwjj 2011-02-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jaylong35 的回复:]
listen只是用来开启,并设置accept队列的长度
而与客户端信息的收发没有直接关系。
收发速度只与你服务器本身的设计和数据接收处理方式有关
所以,你要改变处理速度,并不是看listen的backlog,而是要修改数据接收处理部分
就是recv部分
[/Quote]
对于recv就是一个函数,这个接收的快慢会影响到服务器的性能吗?对于服务器这段就是一个接收函数,那怎么能让它的处理速度快点呢!谢谢你能给以帮助
jaylong35 2011-02-17
  • 打赏
  • 举报
回复
listen只是用来开启,并设置accept队列的长度
而与客户端信息的收发没有直接关系。
收发速度只与你服务器本身的设计和数据接收处理方式有关
所以,你要改变处理速度,并不是看listen的backlog,而是要修改数据接收处理部分
就是recv部分
justkk 2011-02-17
  • 打赏
  • 举报
回复
这个backlog 只是一个提示,具体有效数值与操作系统有关
看看《Unix网络编程》

像楼上说的,这个参数指定接收队列的长度
如果队列未满,在服务器accept之前,客户端也可以成功连接

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧