社区
网络编程
帖子详情
如何检测TCP网络连接状态?
tigerfox
2004-11-07 10:50:50
通过SOCKET检测TCP网络连接。
我用过getpeername(),但这只对正常连接中断时有效,但对于硬件连接中断没有效果。
我想用ping但,但怕增大网络流量。
还有没有其它办法呢??
...全文
785
11
打赏
收藏
如何检测TCP网络连接状态?
通过SOCKET检测TCP网络连接。 我用过getpeername(),但这只对正常连接中断时有效,但对于硬件连接中断没有效果。 我想用ping但,但怕增大网络流量。 还有没有其它办法呢??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
sayo
2004-11-09
打赏
举报
回复
继续GZ
nonocast
2004-11-08
打赏
举报
回复
MSN做得很好的啊
他是怎么搞得?
hundlom
2004-11-08
打赏
举报
回复
转自驱动开发网
发信人: rain (夜猫子大王), 信区: SysInternals
标 题: Re: 请问实时发现网络down掉的原理?(转载)
发信站: 武汉白云黄鹤站 (2001年03月31日09:57:05 星期六), 转信
实时检测网线被拔掉是需要网卡设备驱动程序支持的,
如果驱动程序不支持是无法实现的,NDIS4要求设备驱动程序
最好提供CheckForHangHandler回调函数。2000会每隔2秒钟
调用此函数。驱动程序在此函数中检查网卡连线状态,
如果发生了改变,即拔去了网线或接上了网线,
驱动程序就会调用NdisMIndicateStatus通知所有的上层NDIS协议驱动程序.
其中: NDIS_STATUS_MEDIA_DISCONNECT 指示网线被拔掉,
NDIS_STATUS_MEDIA_CONNECT 指示网线被接上
NDIS_STATUS_LINK_SPEED_CHANGE 指示网卡速度改变,10/100自适应网卡才有。
网卡一般都有 status register 指示当然的连线状态,
也有网卡是通过获得 led status 来知道当前的连线状态的,
即绿灯亮表示连线,灭表示没有。
有些网卡拔掉或接上网线时会产生中断,在中断处理程序中一般也
检测网络连线状态并调用NdisMIndicateStatus,这样连线状态
在2000中就实时反应出来了,否则会在2秒钟内,即NDIS调用CheckForHangHandler后。
这个功能是微软在PC97规范中定义的,所以ndis3没有这个功能。
linux对这个没有要求,novell netware对这个有要求,其它的操作系统我也不清楚。
sayo
2004-11-08
打赏
举报
回复
这是我的一段检测程序,用在自定义的一个线程中,请讨论一下:
DWORD WINAPI CSetSocket::CheckConThread(LPVOID lParam)
{
CSetSocket *pss = (CSetSocket *)lParam;
fd_set fs;
TIMEVAL tm;
int nRet, nLen = 32;
char lpRecv[32];
while(pss->m_bCheckCon)
{
fs.fd_count = 1;
fs.fd_array[0] = pss->m_Socket;
tm.tv_sec = 0;
tm.tv_usec = 300;
nRet = select(0, &fs, NULL, NULL, &tm);
if(0 == nRet) //time out
{
continue;
}else if(1 == nRet)
{
Sleep(50);
nRet = recv(pss->m_Socket, lpRecv, 32, 0);
if(0 == nRet)
//if(!pss->RecvData(lpRecv, &nLen))
{
//call the callback function for the completetion of the connection
if(pss->m_pCallBack)
{
pss->m_pCallBack();
}
pss->m_bConnected = FALSE;
pss->m_bCheckCon = FALSE;
pss->m_hCheckThread = NULL;
break;
}else{
continue;
}
}else if(SOCKET_ERROR == nRet)
{
break;
}
}
return 0;
}
Caps77
2004-11-08
打赏
举报
回复
这个问题一直没有准确的回答,关注一下
gdy119
2004-11-08
打赏
举报
回复
学习!
Micro_Sheng
2004-11-08
打赏
举报
回复
UP一下,学习中......
sharkhuang
2004-11-07
打赏
举报
回复
有个keeplive参数
oyljerry
2004-11-07
打赏
举报
回复
硬件中断会发一个RST包
Lightest
2004-11-07
打赏
举报
回复
硬件连接中断几乎没法检查出来.最简单的办法就是在TCP连接上周期发送检测包
kingzai
2004-11-07
打赏
举报
回复
tlhelp32.h和iphlpapi.lib,能检测出当前的TCP/IP连接状态和连接表。
也就是netstat.exe
1。取得TCP连接表函数:::GetTcpTable();
2.取得UPD监听者表函数:::GetUdpTable();
3.取得IP协议统计情况函数:::GetIpStatistics();
计算机网络 传输层
TCP
和UDP协议
# 使用
TCP
/IP筛选实现网络安全 防火墙设置与端口 # UDP协议特点和报文格式 UDP是无连接的:即发送数据之前不需要建立连接 UDP使用尽最大努力交付:即不保证可靠交付,因此主机不需要维持复杂的连接
状态
表 #
TCP
协议...
TCP
连接异常
状态
检测
TCP
连接异常
状态
检测
TCP
是一种面向连接的协议,连接的建立和断开需要通过收发相应的分节来实现。某些时候,由于网络的故障或是一方主机的突然崩溃而另一方无法
检测
到,以致始终保持着不存在的连接。关于
TCP
异常...
计算机网络之
TCP
中11种
状态
文章目录计算机网络之
TCP
的11种
状态
1.
TCP
的11种
状态
计算机网络之
TCP
的11种
状态
1.
TCP
的11种
状态
1.CLOSED: 初始
状态
,表示
TCP
连接是“关闭着的”或“未打开的”。 2.LISTEN: 表示服务器端的某个SOCKET处于监听...
TCP
连接的
状态
详解以及故障排查
我们通过了解
TCP
各个
状态
,可以排除和定位网络或系统故障时大有帮助。(总结网络上的内容) 1、
TCP
状态
了解
TCP
之前,先了解几个命令: linux查看
tcp
的
状态
命令: 1)、netstat -nat 查看
TCP
各个
状态
的数量 2)...
netstat查看
TCP
连接
状态
这篇文章主要记录一下使用netstat查看
tcp
连接
状态
的实例
tcp
的连接
状态
主要是通过三次握手和四次挥手进行
状态
转移,关于三次握手和四次挥手的详情可以看我的上一篇文章《总结三次握手和四次挥手》 先上一张
状态
转移...
网络编程
18,355
社区成员
64,217
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章