免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10197 | 回复: 8
打印 上一主题 下一主题

socket保持连接的时间是多久 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-28 14:00 |只看该作者 |倒序浏览
客户端用socket连接某个网站,发送的http请求是keep-alive类型的,请问这种sockfd能保持多久不会被关闭?

向同个服务器发送多个请求时,每个请求必须重新获取sockfd吗?还是只要connect一次,就能连续的发送请求呢?或者如何告诉服务器,让保持这个连接而不要关闭呢?

如果请求是keep-alive类型的,最后一次接收数据的时候阻塞很久才能判断服务端没有数据发送过来。这个要如何处理?

论坛徽章:
0
2 [报告]
发表于 2008-10-28 14:16 |只看该作者
1. 多久的话看RFC吧,里面有描述,一般Server的返回里面会说明的。
2. Server的返回数据中是有长度的,判断收完了就没必要再等待了。

论坛徽章:
0
3 [报告]
发表于 2008-10-28 14:22 |只看该作者
如果你的web server如果为apache,配置了支持keep-alive,它会有如下配置:
KeepAlive on
MaxKeepAliveRequests 0 ----是0不限制单个连接上处理的请求数
KeepAliveTimeout 15      ---- 超时时间 如果配置很大就可以处理很多请求

你要看下你的服务器配置拉。如果你的客户端请求迟迟不回,你这边可以选择主动断开阿,就相当于你打不开网页关闭浏览器的情况,一般
的web server配置可能会关闭keepalive保证对多客户端的服务,这样你发送一个请求就必须要建立一次连接拉。

[ 本帖最后由 zhoubug 于 2008-10-28 14:23 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-10-28 14:57 |只看该作者
如何测试这连接是否还有效呢?

论坛徽章:
0
5 [报告]
发表于 2008-10-28 15:04 |只看该作者
原帖由 greatho1507 于 2008-10-28 14:57 发表
如何测试这连接是否还有效呢?


不是有个SO_RCVTIMEO可以对读的超时时间设置吗? 自己手动设置一下这样行吗?

论坛徽章:
0
6 [报告]
发表于 2008-10-28 16:35 |只看该作者
原帖由 LinuxKen 于 2008-10-28 15:04 发表


不是有个SO_RCVTIMEO可以对读的超时时间设置吗? 自己手动设置一下这样行吗?

超时并不能说明连接就 无效了。。。。
recv的返回值 == 0,说明连接关闭
但是recv返回值 < 0,表明传输出错
网络质量不好的时候,recv返回-1的几率较高,应该继续接受数据

论坛徽章:
0
7 [报告]
发表于 2008-10-28 17:14 |只看该作者
so_keepalive呢?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
8 [报告]
发表于 2008-10-28 17:19 |只看该作者
so_keepalive 在各个系统中是不一样的,假如是默认的话,每隔2小时才检查一下,可以通过tcp_keeplive来缩短检查时间,但不是每个系统都支持这个

论坛徽章:
0
9 [报告]
发表于 2008-10-29 21:43 |只看该作者
设置了so_keepalive,http头也用了keep alive,但如果等几秒钟没有数据传输的话,连接就失效了。
如果不断的发送不同的请求,是否这个连接就一直存活着呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP