LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1601|回复: 7

关于心跳函数的问题

[复制链接]
发表于 2007-8-8 23:09:43 | 显示全部楼层 |阅读模式
最近在编一个socket通信的程序,遇到以下问题,向大家请教。
在socket通信中如果客户端关闭了,那么在网络正常的情况下,服务器端可以通过read或者recv函数的返回值获知客户端的状态。但是这中方法在网络不是非正常中断(譬如拔网线)的情况下是无法实现的。
因此我找了很多资料,据说可以用一个心跳函数,也就是发tcp的带外数据,可以实现这一功能。但是我不明白send(sockfd,&c,1,MSG_OOB)与send(sockfd,&c,1,0) 在效果上有什么区别呢,在阻塞模式下,我拔掉网线后,会有什么不同?哪位大虾知道心跳函数如何使用阿,请指教!!!!!非常感谢!!!
发表于 2007-8-9 09:12:59 | 显示全部楼层
--------
做记号,以便学习
--------
回复 支持 反对

使用道具 举报

发表于 2007-8-9 09:21:08 | 显示全部楼层
用另外一个线程不断的connect对方,通过返回的errno可以知道网络的状况。
比如EHOSTUNREACH或ENETDOWN
回复 支持 反对

使用道具 举报

发表于 2007-8-9 14:23:20 | 显示全部楼层
好注意,可是,搂主说的什么心跳函数是个什么东东?
回复 支持 反对

使用道具 举报

发表于 2007-8-9 15:26:39 | 显示全部楼层
在<UNIX网络编程> 第24章有心跳函数的例子.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-9 23:01:23 | 显示全部楼层
看了 那树上的例子了,也调用了那个函数,但还是不行阿,还是老问题。我把网线一拔掉服务器就一直在监听状态。是不是我调用错误阿?请楼上的指教.谢谢了。还有一个问题就是发送带外数据与发送正常数据的时候,如果同样在阻塞状态下,同样是用SEND发送,请问他们的工作方式还是一样的马?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-9 23:07:52 | 显示全部楼层
Post by realtang
用另外一个线程不断的connect对方,通过返回的errno可以知道网络的状况。
比如EHOSTUNREACH或ENETDOWN



谢谢回复。
你这个方法也是好办法。不过这样的话开销会不会很大,运行时间也会稍长一些吧。
还有个问题我不太明白,如果在建立一个connect我应该在开一个客户端吗?我要求是服务器端要知道网络状况,一旦网络中止了,让服务器的进程全部结束。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-9 23:11:18 | 显示全部楼层
Post by sunorr
好注意,可是,搂主说的什么心跳函数是个什么东东?




心跳函数,是带外数据的一种应用,我在网上找了很多资料,大家都说它可以也测试网络的状况,特别是网络非正常中断,譬如把网线这类的,具体的你可以找书看看,譬如楼上说的那本书。
我也是学LINUX网络编程不久,还要慢慢琢磨。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表