Chinaunix

标题: socket保持连接的时间是多久 [打印本页]

作者: greatho1507    时间: 2008-10-28 14:00
标题: socket保持连接的时间是多久
客户端用socket连接某个网站,发送的http请求是keep-alive类型的,请问这种sockfd能保持多久不会被关闭?

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

如果请求是keep-alive类型的,最后一次接收数据的时候阻塞很久才能判断服务端没有数据发送过来。这个要如何处理?
作者: Cyberman.Wu    时间: 2008-10-28 14:16
1. 多久的话看RFC吧,里面有描述,一般Server的返回里面会说明的。
2. Server的返回数据中是有长度的,判断收完了就没必要再等待了。
作者: zhoubug    时间: 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 编辑 ]
作者: greatho1507    时间: 2008-10-28 14:57
如何测试这连接是否还有效呢?
作者: LinuxKen    时间: 2008-10-28 15:04
原帖由 greatho1507 于 2008-10-28 14:57 发表
如何测试这连接是否还有效呢?


不是有个SO_RCVTIMEO可以对读的超时时间设置吗? 自己手动设置一下这样行吗?
作者: alexhappy    时间: 2008-10-28 16:35
原帖由 LinuxKen 于 2008-10-28 15:04 发表


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

超时并不能说明连接就 无效了。。。。
recv的返回值 == 0,说明连接关闭
但是recv返回值 < 0,表明传输出错
网络质量不好的时候,recv返回-1的几率较高,应该继续接受数据
作者: greatho1507    时间: 2008-10-28 17:14
so_keepalive呢?
作者: chenzhanyiczy    时间: 2008-10-28 17:19
so_keepalive 在各个系统中是不一样的,假如是默认的话,每隔2小时才检查一下,可以通过tcp_keeplive来缩短检查时间,但不是每个系统都支持这个
作者: greatho1507    时间: 2008-10-29 21:43
设置了so_keepalive,http头也用了keep alive,但如果等几秒钟没有数据传输的话,连接就失效了。
如果不断的发送不同的请求,是否这个连接就一直存活着呢




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2