运用alarm系统调用检测网络是否断开

比如对于一个Server/Client程序,Client会每隔一定时间(比如TIME_OUT_CLIENT)会向Server发送“CheckConnect”信息,Server收到这个信息会调用回调函数__recv_check_connect()

这个是否可以再__recv_check_connect()里面alarm一个TIME_OUT_SERVER时间,当这个时间到了的时候,linux内核会发送一个signal
(SIGALRM)给本进程。

注意: TIME_OUT_SERVER > TIME_OUT_CLIENT

这样子,每次在TIME_OUT_CLIENT时间结束后,又重新signal了一个TIME_OUT_SERVER时间,所以如果网络一直没有断开的话,本进程是不会接收到signal
(SIGALRM)的。

如果接收到了signal
(SIGALRM),那就表示在TIME_OUT_CLIENT时间内,Server没有收到"CheckConnect"或者Client压根就没有发。这个时候Server可以选择退出关闭资源等操作。


static void __disconnect_timeout_cb(int sig)
{
//*** means already disconnect with client***
//close socket and resource
//finish process
}

static void __recv_check_connect()
{
//when recieve "CheckConnect" info will call the callback
alarm(TIME_OUT_SERVER);
}

void main()
{
//main code
signal(SIGALRM, __disconnect_timeout_cb);
}

alarm系统调用参考信息

http://blog.163.com/t_gf/blog/static/30682476200992254918727/

运用alarm系统调用检测网络是否断开

时间: 2024-10-10 09:15:28

运用alarm系统调用检测网络是否断开的相关文章

使用java检测网络连接状况

windows中可以通过在cmd中使用ping命令来检测网络连接状况,如下: 网络连接正常时: 网络未连接时: 在java中可以通过调用ping命令来判断网络是否连接正常: package module.system.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; /** * 判断网络连接

iOS 网络与多线程--1.检测网络链接状态

通过Reachability库,检测设备的网络连接状况. 使用到的类库:Reachability Reachability库,是一个iOS环境下,检测设备网络状态的库,可以在网络上搜索下载. 使用之前导入到工程内. 之后在视图控制器文件(ViewController.m)内添加以下代码 导入网络状态库  #import "Reachability.h" 1 // 用于检测网络是否存在函数 2 -(BOOL)isExistenceNetwork 3 { 4 BOOL isExistenc

iOS中使用 Reachability 检测网络

iOS中使用 Reachability 检测网络 内容提示:下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测.   写本文的目的 了解Reachability都能做什么 检测3中网络环境 2G/3G wifi 无网络 如何使用通知 单个controller 多个controller 简单的功能: 仅在wifi下使用 Reachability简介 Reachablity 是一个iOS下... 如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder)

c# vs2010 winfrom控件检测网络环境

写下以作备用,代码附上. public partial class UserControl1 : UserControl, IObjectSafety { //检测网络状态 [DllImport("wininet.dll")] private extern static bool InternetGetConnectedState(out int connectionDescription, int reservedValue); /// <summary> /// 检测网

检测网络变化(wifi、2g、3g、4g)

检测网络变化(wifi.2g.3g.4g) 1.注册广播"android.net.conn.CONNECTIVITY_CHANGE"和"android.net.wifi.STATE_CHANGE" 进行监听: private class ConnectivityBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent in

[iOS 多线程 &amp; 网络 - 2.8] - 检测网络状态

A.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的:(1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能)(2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体验 WIFI\3G网络:自动下载高清图片 低速网络:只下载缩略图 没有网络:只显示离线的缓存数据 苹果官方提供了一个叫Reachability的示例程序,便于开发者检测网络状态https://developer.apple.com/library/ios/samplecode/Reachability

iOS 检测网络状态

1.为什么要检测网络状态? 1.1 让用户知道自己的网络状态,防止用户埋怨"这个应用太垃圾,获取数据那么慢" 1.2 根据用户的网络状态,智能处理,提升用户体验 例如某些手机浏览器,检测到用户网络是2G/3G时,会自动切换为无图模式 2.手动触发 2.1 首先下载苹果的示例程序Reachability, 取得示例程序里的Reachability.h和Reachability.m, 添加到自己项目里 代码如下 - (void)touchesBegan:(NSSet *)touches w

android检测网络连接状态示例讲解

网络的时候,并不是每次都能连接到网络,因此在程序启动中需要对网络的状态进行判断,如果没有网络则提醒用户进行设置 Android连接首先,要判断网络状态,需要有相应的权限,下面为权限代码(AndroidManifest.xml): 复制代码 代码如下: <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="a

iOS使用Reachability实时检测网络连接状况

//在程序的启动处,开启通知 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //..... //开启网络状况的监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name: kR