URN Logo
UNIX Resources » Linux » China Linux Forum » C/C++编程版 » 19 » 检测tcp链接断开有什么方法?
announcement 声明: 本页内容为中国Linux论坛的内容镜像,文章的版权以及其他所有的相关权利属于中国Linux论坛和相应文章的作者,如果转载,请注明文章来源及相关版权信息。
Resources
China Linux Forum(finished)
Linux Forum(finished)
FreeBSD China(finished)
linuxforum.net
  业界新闻与评论
  自由软件杂谈
  IT 人生
  Linux软件快递
  翻译作坊
  Linux图书与评论
  GNU Emacs/XEmacs
  Linux 中文环境和中文化
  Linux桌面与办公软件
  Linux 多媒体与娱乐版
  自由之窗Mozilla
  笔记本电脑上的Linux
  Gentoo
  Debian 一族
  网络管理技术
  Linux 安装与入门
  WEB服务器和FTP服务器
  域名服务器和邮件服务器
  Linux防火墙和代理服务器应用
  文件及打印服务器
  技术培训与认证
  Linux内核技术
  Linux 嵌入技术
  Linux设备驱动程序
  Linux 集群技术
  LINUX平台数据库
  系统和网络安全
  CPU 与 编译器
  系统计算研究所专栏
  Linux下的GUI软件开发
  C/C++编程版
  PHP 技 术
  Java&jsp技术
  Shell编程技术
  Perl 编 程
  Python 编 程
  XML/Web Service 技术
  永远的Unix
  FreeBSD世界
   
检测tcp链接断开有什么方法?
检测tcp链接断开有什么方法? - winglion [2006-02-22 10:17 | 481 byte(s)]
 
Re: 检测tcp链接断开有什么方法? - mrchenlei [2006-02-22 21:59 | 223 byte(s)]
 
Re: 检测tcp链接断开有什么方法? - winglion [2006-02-24 09:21 | 314 byte(s)]
 
Re: 检测tcp链接断开有什么方法? - mrchenlei [2006-02-25 17:11 | 298 byte(s)]
 
Re: 检测tcp链接断开有什么方法? - daemeon [2006-02-22 11:38 | 308 byte(s)]
 
Subject: 检测tcp链接断开有什么方法?
Author: winglion    Posted: 2006-02-22 10:17    Length: 481 byte(s)
[Original] [Print] [Top]
我正在一嵌入式板上实现ftp。ftp server一般都有个超时断开的功能.
即某个时间内无动作,就认为client已经关闭链接,于是关闭与该client的
链接。
我本想用recv收到0字节n次后断开链接。但发现进入recv后好像就
一直等下去直到收到字符才会出来。
不知倒那位有经验的可以指点一下怎么去判断链接是否断开了呢?
怎么等待一段时间后自动关闭链接呢!
我新的想法是在sockopt里设个超时时间!
有经验的兄弟门说说看法!
----
我们都是复活的魔鬼,
疯狂的野心是我们的武器!
[Original] [Print] [Top]
Subject: Re: 检测tcp链接断开有什么方法?
Author: daemeon    Posted: 2006-02-22 11:38    Length: 308 byte(s)
[Original] [Print] [Top]

struct timeval timeout = {
.tv_sec = 20,
};
setsockopt(newfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
setsockopt(newfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));


----
Just a newbie
[Original] [Print] [Top]
Subject: Re: 检测tcp链接断开有什么方法?
Author: mrchenlei    Posted: 2006-02-22 21:59    Length: 223 byte(s)
[Original] [Print] [Top]
normally there are two ways:
when send return EPIPE or recv return 0;
if you use recv as blocked way it will return when rcved data or the connection closed by peer.
another way is 'select/poll'.
[Original] [Print] [Top]
Subject: Re: 检测tcp链接断开有什么方法?
Author: winglion    Posted: 2006-02-24 09:21    Length: 314 byte(s)
[Original] [Print] [Top]
谢谢两位,再问mrchenlei
你的意思是说如果我用阻塞式的recv函数调用,收到0长就表示client已经断开了,是这个意思吗!
如果是,这倒是个简单的方法,但如果client程序是被非正常关闭的,即没有带fin标志的包发过来,
recv还会自动退出吗?
能否再说说select/poll 查了一下google,没找到能说明白的!
----
我们都是复活的魔鬼,
疯狂的野心是我们的武器!
[Original] [Print] [Top]
Subject: Re: 检测tcp链接断开有什么方法?
Author: mrchenlei    Posted: 2006-02-25 17:11    Length: 298 byte(s)
[Original] [Print] [Top]
if the physical link is OK then things is that so but when the physical
link is not OK or the peer is hard-dead you must use 'keep alive' way
to detect this case.
the usage about select/poll please refer to the document written by richard steven:the unix network program.
[Original] [Print] [Top]
« Previous thread
函数errexit(const char *format, ...)参数部分 “..." 该如何理解
C/C++编程版
19
Next thread »
关于用“=”进行数据结构赋值的问题
     

Copyright © 2007 UNIX Resources Network, All Rights Reserved.      About URN | Privacy & Legal | Help | Contact us
备案序号: 京ICP备05006143    webmaster: webmaster@unixresources.net
This page created on 2008-07-17 03:52:19, cost 0.05106520652771 ms.