运用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/
?
?
轉載于:https://www.cnblogs.com/soaringEveryday/p/3748204.html
總結
以上是生活随笔為你收集整理的运用alarm系统调用检测网络是否断开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Jquery的toggle()与trig
- 下一篇: 转 abap中sy-index和sy-t