[Linux]检测socket异常断开--keepalive
来源:互联网 发布:水果网络销售 编辑:程序博客网 时间:2024/06/10 03:29
参考文献:
http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/#usingkeepalive
http://blog.csdn.net/jwybobo2007/article/details/6162784
#include<stdlib.h>#include<stdio.h>#include<netinet/in.h>#include<netinet/tcp.h>#include<netdb.h>#include<sys/socket.h>#include<sys/types.h>#include<unistd.h>#include<fcntl.h>#include<errno.h>#include<string.h>int main(const int argc,char* const argv[]){int socket_fd;struct sockaddr_in name;struct hostent *hostinfo;socket_fd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);name.sin_family = AF_INET;hostinfo = gethostbyname(argv[1]);if(hostinfo == NULL) return -1;name.sin_addr = *((struct in_addr*)hostinfo->h_addr);name.sin_port = htons(atoi(argv[2]));if(connect(socket_fd,(struct sockaddr*)&name,sizeof(name))==-1) return -2;char buf[1024];ssize_t count;int sock_flag;int times=0;sock_flag = fcntl(socket_fd,F_GETFL);fcntl(socket_fd,F_SETFL,sock_flag|O_NONBLOCK);//write(socket_fd,"GET /\n",strlen("GET /\n"));int keepalive = 1;int keepidle = 5;int keepinterval = 3;int keepcount = 2;if(setsockopt(socket_fd,SOL_SOCKET,SO_KEEPALIVE,&keepalive,sizeof(keepalive))<0) return -3;if(setsockopt(socket_fd,SOL_TCP,TCP_KEEPIDLE,&keepidle,sizeof(keepidle))<0) return -4;if(setsockopt(socket_fd,SOL_TCP,TCP_KEEPINTVL,&keepinterval,sizeof(keepinterval))<0) return -5;if(setsockopt(socket_fd,SOL_TCP,TCP_KEEPCNT,&keepcount,sizeof(keepcount))<0) return -6;while(true){count=read(socket_fd,buf,1024);if(count>0) write(STDOUT_FILENO,buf,count);else if(count==-1 && errno==EAGAIN) {printf("%dth sleep 1s\n",++times);sleep(1);}else{printf("count=%d,errno=%d\n",count,errno);break;}}return 0;}
0 0
- [Linux]检测socket异常断开--keepalive
- linux socket tcp 断开检测
- socket选项自带的TCP异常断开检测
- socket选项自带的TCP异常断开检测
- socket选项自带的TCP异常断开检测
- socket选项自带的TCP异常断开检测
- socket选项自带的TCP异常断开检测
- socket选项自带的TCP异常断开检测
- 检测SOCKET是否断开
- TCP异常断开检测
- TCP异常断开检测
- socket异常断开
- Linux多线程socket程序异常退出-断开的管道
- 检测socket链接是否断开
- 检测socket链接是否断开
- TCP连接异常断开检测
- TCP连接异常断开检测
- TCP连接异常断开检测
- 密码传输问题
- 从100PV到1亿级PV网站架构演变
- Hadoop MapReduce应用案例——排序
- 常见javascript 兼容工具函数封装
- Android 自己 容易犯的错误
- [Linux]检测socket异常断开--keepalive
- Android——使用多状态按钮ToggleButton(自己动手 丰衣足食)
- jQuery插件开发全解析
- 安卓 ImageView动态改变大小
- java Statement与PreparedStatement在面对char遇到的问题
- 黑马程序员--java入门之函数重载
- java 关键字
- VSTO及多线程等问题的汇编
- 关于开启Activity的问题