<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[服务器中判断客户端socket断开连接的方法 ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Web服务器]]></category>
<pubDate>Mon, 02 Feb 2015 09:38:08 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	下面来罗列一下判断远端已经断开的方法：<br/><br/>法一：<br/>当recv()返回值小于等于0时，socket连接断开。但是还需要判断 errno是否等于 EINTR，如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的，socket连接还是正常的，不应close掉socket连接。<br/><br/> <br/><br/>法二：<br/>&nbsp;&nbsp;struct tcp_info info; <br/>&nbsp;&nbsp;int len=sizeof(info); <br/>&nbsp;&nbsp;getsockopt(sock, IPPROTO_TCP, TCP_INFO, &amp;info, (socklen_t *)&amp;len);<br/>&nbsp;&nbsp;if((info.tcpi_state==TCP_ESTABLISHED))&nbsp;&nbsp;则说明未断开&nbsp;&nbsp;else 断开<br/><br/>法三：<br/>若使用了select等系统函数，若远端断开，则select返回1，recv返回0则断开。其他注意事项同法一。<br/> <br/><br/>法四：<br/>int keepAlive = 1; // 开启keepalive属性<br/>int keepIdle = 60; // 如该连接在60秒内没有任何数据往来,则进行探测<br/>int keepInterval = 5; // 探测时发包的时间间隔为5 秒<br/>int keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.<br/><br/>setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&amp;keepAlive, sizeof(keepAlive));<br/>setsockopt(rs, SOL_TCP, TCP_KEEPIDLE, (void*)&amp;keepIdle, sizeof(keepIdle));<br/>setsockopt(rs, SOL_TCP, TCP_KEEPINTVL, (void *)&amp;keepInterval, sizeof(keepInterval));<br/>setsockopt(rs, SOL_TCP, TCP_KEEPCNT, (void *)&amp;keepCount, sizeof(keepCount));<br/><br/>设置后，若断开，则在使用该socket读写时立即失败，并返回ETIMEDOUT错误<br/><br/> <br/><br/>法五：<br/>自己实现一个心跳检测，一定时间内未收到自定义的心跳包则标记为已断开。<br/><br/><br/>摘自：http://blog.csdn.net/god2469/article/details/8801356<br/><br/>使用 epoll或poll ，如何确定 与客户端的链接断开 ？<br/>http://bbs.csdn.net/topics/240073448<br/><br/>epoll事件检测：<br/>http://www.360doc.com/content/09/0812/09/1894_4858884.shtml<br/><br/>epoll的各个事件触发条件测试：<br/>http://www.cppblog.com/yangsf5/archive/2009/03/12/76353.html<br/><br/>利用epoll和多进程解决高并发问题 ：<br/>http://blog.csdn.net/ypbsyy/article/details/38046267
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 服务器中判断客户端socket断开连接的方法 ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>