免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: liujq110
打印 上一主题 下一主题

KEEPALIVE 问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-03-28 14:25 |只看该作者

回复 #3 xinglp 的帖子

请问 这样做是不可实现 还是 ????

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
12 [报告]
发表于 2009-03-28 14:58 |只看该作者
yangsf5说的对啊

论坛徽章:
0
13 [报告]
发表于 2009-03-28 15:18 |只看该作者

回复 #12 xinglp 的帖子

#include "COM_Head.h"
#include "COM_Macro.h"

#include "PUB_LogFile.h"
#include "THD_SocketServer.h"

//=============全局变量===========================

//=================================================================

CTHD_SocketServer::CTHD_SocketServer()
{
  m_strMsg = new char[STRMAXLEN];
  memset(m_strMsg, 0, STRMAXLEN);
        SOCKET = -1;
  //keepalive 事件间隔
  keepAlive = 1; // 开启keepalive属性
  keepIdle = 18; // 如该连接在18秒内没有任何数据往来,则进行探测
  keepInterval = 5; // 探测时发包的时间间隔为5 秒
  keepCount = 3; // 探测尝试的次数.如果第1次探测包就收到响应了,则后2次的不再发.

}


  在这里初始化    断网后等了好久也检测不到,好像是不起作用

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
14 [报告]
发表于 2009-03-28 16:37 |只看该作者
看了你1楼的代码,
你把SO_KEEPALIVE这个选项在accept之后设置的。
这样不行,你可以看下UNP。
里边讲,开启某几个选项(包括SO_KEEPALIVE)必须在listen之前设置,新建立的socket继承listen_fd的这些选项。

ps:linux里可以这样改变SO_KEEPALIVE的默认属性吗?
我搜索的时候只找到windows可以这样。你要是成功能,给告知下。

论坛徽章:
0
15 [报告]
发表于 2009-03-28 17:57 |只看该作者

回复 #14 yangsf5 的帖子

呵呵 linux 下 用.c 的测试程序 成功了  呵呵  不过也 是在 accept 之后

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
16 [报告]
发表于 2009-03-28 18:09 |只看该作者

回复 #15 liujq110 的帖子

啊?UNP不在手边,我再看看。:wink:

论坛徽章:
0
17 [报告]
发表于 2009-03-28 21:23 |只看该作者

回复 #16 yangsf5 的帖子

发现了一个很奇怪的事情:
同样的一个客户端连接两个不同的服务程序 ,客户端采用相同的非法关闭方式(连接上后不发任何消息,直接关闭客户端:不是close(fd),而是直接关掉客户端)。服务程序产生的事件是不一样的。

.c 的测试程序产生的事件是:EPOLLERR: events[n].events = 25  error code = 104,error string = Connection reset by peer


.cpp  产生的事件是:EPOLLIN: events.events = 25 奇怪  !!!

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
18 [报告]
发表于 2009-03-28 21:57 |只看该作者
你测试都是这么测的吗?

  1. if( EPOLLIN)
  2. if( EPOLLERR)
复制代码


不能这样:

  1. if( EPOLLIN)
  2. else if(EPOLLERR)
复制代码

因为有些事件不止触发一个事件。当你写if分支的时候,人为的把它指向了谁在if分支的前边就打印显示只是谁了。

论坛徽章:
0
19 [报告]
发表于 2009-03-28 22:04 |只看该作者

回复 #18 yangsf5 的帖子

谢谢  跟你学了好多东西

论坛徽章:
1
天蝎座
日期:2013-08-25 10:27:22
20 [报告]
发表于 2009-03-28 22:09 |只看该作者

回复 #19 liujq110 的帖子

呵呵,相互学习。。
我也只懂些皮毛。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP