linux下使用TCP存活(keepalive)定时器
2008-05-22 14:34
/*由
hi.baidu.com/zhihui3409
收集整理,转载时请附带
此行*/
一、什么是keepalive定时器?[
1]
在一
个空闲的(
idle
)
TCP
连接上,没有任
何的数据流,许多
TCP/IP
的初学者都对此感到惊奇。也就是说,如果
TCP
连
接两端没有任何一个进程在向对方发送数据,那么在这两个
TCP
模块之间没有任何的数据交换。你可能
在其它的网络协议中发现有轮询(
polling
),但在
TCP
中
它不存在。言外之意就是我们只要启动一个客户端进程,同服务器建立了
TCP
连接,不管你离开几小
时,几天,几星期或是几个月,连接依旧存在。中间的路由器可能崩溃或者重启,电话线可能
go down
或
者
back up
,只要连接两端的主机没有重启,连接依旧保持建立。
这就
可以认为不管是客户端的还是服务器端的应用程序都没有应用程序级(
application-level
)
的定时器来探测连接的不活动状态(
inactivity
),从而引起任何一个应用程序的终止。
然
而有的时候,服务器需要知道客户端主机是否已崩溃并且关闭,或者崩溃但重启。许多实现提供了存活定时器来完成这个任务。
存活
定时器是一个包含争议的特征。许多人认为,即使需要这个特征,这种对对方的轮询也应该由应用程序来完成,而不是由
TCP
中
实现。此外,
如果两个终端系统之间的某个中间网络上有连接的暂时中断,那么存活选项(
option
)
就能够引起两个进程间一个良好连接的终止。例如,如果正好在某个中间路由器崩溃、重启的时候发送存活探测,
TCP
就
将会认为客户端主机已经崩溃,但事实并非如此。
存活
(
keepalive
)并不是
TCP
规范的
一部分。在
Host Requirements RFC
罗列有不使用它的三个理由:(
1
)
在短暂的故障期间,它们可能引起一个良好连接(
good connection
)被释放(
dropped
),
(
2
)它们消费了不必要的宽带,(
3
)在以
数据包计费的互联网上它们(额外)花费金钱。然而,在许多的实现中提供了存活定时器。
一些
服务器应用程序可能代表客户端占用资源,它们需要知道客户端主机是否崩溃。存活定时器可以为这些应用程序提供探测服务。
Telnet
服
务器和
Rlogin
服务器的许多版本都默认提供存活选项。
个人
计算机用户使用
TCP/IP
协议通过
Telnet
登
录一台主机,这是能够说明需要使用存活定时器的一个常用例子。如果某个用户在使用结束时只是关掉了电源,而没有注
相关文档:
下面这个例子列出了所有系统定义的错误代码及错误描述
源代码是:
/************关于本文档********************************************
*filename: strerror.c
*purpose: 列出了系统定义的所有错误代码及描述
*wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)
Linux爱好者 Linux知识传播 ......
1、LINUX下TTY、CONSOLE、串口之间是怎样的层次关系?具体的函数接口是怎样的?串口是如何被调用的?
tty和console这些概念主要是一些虚拟设备的概念,而串口更多的是指一个真正的设备驱动。Tty实际是一类终端I/O设备的抽象,它实际上更多的是一个管理的概念,目的是向上层的VFS提供 ......
在linux下通过svn更新了一个php文件,目的是想通过执行这个文件来读数据插入到数据库。在其中的几台执行没有问题,其中一台就发现了Could not open input file这个错误,后来查找资料才发现原来是文件格式的问题,出错时文件格式是dos,可以在vi中用:set ff来查看,如果是dos格式,那么则用:set ff=unix来设置新的格式,这� ......
1,串口操作需要的头文件
#include /* 标准输入输出定义 */
#include /* 标准函数库定义 */
#include /* Unix 标准函数定义 */
#include
#include
#incl ......
把自己常用的一些linux命令记录下来
1. 查看当前用户和组
less /etc/passwd
less /etc/group 或者 groups 查看组
有人说用上面那两个命令得到的结果不完全,一些特殊方式建立的就看不到了,可改用
getent passwd
getent group
2. 改变文件的所有者和所属组
chown baoniu ......