nagios当中使用nonblocking方式建立tcp连接
来源:互联网 发布:链表和动态数组的区别 编辑:程序博客网 时间:2024/05/20 03:37
int my_tcp_connect(char *host_name, int port, int *sd, int timeout){struct addrinfo hints;struct addrinfo *res;int result;char *port_str=NULL;int flags=0;fd_set rfds;fd_set wfds;struct timeval tv;int optval;socklen_t optlen;memset(&hints,0,sizeof(hints));hints.ai_family=PF_INET;hints.ai_socktype=SOCK_STREAM;asprintf(&port_str,"%d",port);result=getaddrinfo(host_name,port_str,&hints,&res);if(result!=0){/*printf("GETADDRINFO: %s (%s) = %s\n",host_name,port_str,gai_strerror(result));*/return ERROR;}/* create a socket */*sd=socket(res->ai_family,SOCK_STREAM,res->ai_protocol);if(*sd<0){freeaddrinfo(res);return ERROR;}/* make socket non-blocking */flags=fcntl(*sd,F_GETFL,0);fcntl(*sd,F_SETFL,flags|O_NONBLOCK);/* attempt to connect */result=connect(*sd,res->ai_addr,res->ai_addrlen);/* immediately successful connect */if(result==0){result=OK;/*printf("IMMEDIATE SUCCESS\n");*/}/* connection error */else if(result<0 && errno!=EINPROGRESS){result=ERROR;}/* connection in progress - wait for it... */else{do{/* set connection timeout */tv.tv_sec=timeout;tv.tv_usec=0;FD_ZERO(&wfds);FD_SET(*sd,&wfds);rfds=wfds;/* wait for readiness */result=select((*sd)+1,&rfds,&wfds,NULL,&tv);/*printf("SELECT RESULT: %d\n",result);*//* timeout */if(result==0){/*printf("TIMEOUT\n");*/result=ERROR;break;}/* an error occurred */if(result<0 && errno!=EINTR){result=ERROR;break;}/* got something - check it */else if(result>0){/* get socket options to check for errors */optlen=sizeof(int);if(getsockopt(*sd,SOL_SOCKET,SO_ERROR,(void *)(&optval),&optlen) < 0){ result=ERROR;break;}/* an error occurred in the connection */if(optval!=0){result=ERROR;break;}/* the connection was good! *//*printf("CONNECT SELECT: ERRNO=%s\n",strerror(errno));printf("CONNECT SELECT: OPTVAL=%s\n",strerror(optval));*/result=OK;break;}/* some other error occurred */else{result=ERROR;break;}}while(1);}freeaddrinfo(res);return result;}
一个很标准的例子,输入为ip,端口号和超时时长,返回socket的文件描述符
- nagios当中使用nonblocking方式建立tcp连接
- Python: 使用select函数编写nonblocking TCP/IP socket程序
- 使用tcp方式连接libvirtd
- 使用Socket建立网络连接TCP版
- TCP建立连接_legend050709
- TCP连接建立、关闭
- TCP协议---建立连接
- CSocket建立TCP连接
- TCP建立,释放连接
- TCP建立连接过程
- TCP连接建立断开
- TCP建立,释放连接
- 使用pb的connection对象建立TCP连接
- Swift代码使用GCDAsyncSocket库建立TCP连接失败。
- 使用pb的connection对象建立TCP连接
- 使用Java建立TCP连接并发送数据
- SIM800使用AT进行GPRS建立TCP远程连接
- HTTP 连接建立方式
- 免费防火墙GeSWall主机防御系统 v2.83 下载
- 金山网盾3.0正式版 免费安全辅助软件
- Vera++ - Programmable verification and analysis tool for C++
- C++ CheckStyle
- Automated code reviews with Checkstyle, Part 1
- nagios当中使用nonblocking方式建立tcp连接
- 监控工具mrtg,cacti,rrdtool,nagios,zabbix比较和安装
- statfs 函数
- 127. Easy come, easy go. 来也匆匆,去也匆匆
- 关于listview滚动不停getView()的问题~~已解决~
- 数据库平滑演进或者说数据平滑迁移方案及步骤
- -重要的SharedPreferes
- 12月19日工作总结
- ASP.NET 图片防盗链的实现原理分析