My Network programming library
2015-11-10 10:04
288 查看
1.服务器初始化函数
调用如下:
2.客户端失败重新连接函数
调用如下:
3.头文件
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <sys/time.h>
#include <sys/resource.h>
/******************************************************************** 函数名:服务器初始化函数 参考:APUE 功能:socket,bind,listen动作的集合 返回值:成功返回套接字描述符,失败返回-1 *******************************************************************/ int initserver(int type,const struct sockaddr *addr,socklen_t alen,int qlen) { int fd; int err=0; if((fd=socket(addr->sa_family,type,0))<0) return -1; if(bind(fd,addr,alen)<0) goto errout; if(type==SOCK_STREAM || type==SOCK_SEQPACKET) { if(listen(fd,qlen)<0) goto errout; } return fd; errout: err=errno; close(fd); errno=err; return -1; }
调用如下:
bzero(&my_addr, sizeof(my_addr)); my_addr.sin_family = PF_INET; my_addr.sin_port = htons(myport); if (argv[3]) my_addr.sin_addr.s_addr = inet_addr(argv[3]); else my_addr.sin_addr.s_addr = INADDR_ANY; if((sockfd=initserver(SOCK_STREAM,(struct sockaddr *)&my_addr,sizeof(struct sockaddr),lisnum))==-1) { perror("init server"); exit(1); }
2.客户端失败重新连接函数
/******************************************************************** *函数功能:根据指数补偿算法重新尝试连接 *参考:APUE *返回值:成功返回套接字描述符,失败返回-1 *******************************************************************/ int connectRetry(int domain,int type,int protocol,const struct sockaddr *addr,socklen_t alen,int MAXSLEEP) { int numsec,fd; for(numsec=1;numsec<=MAXSLEEP;numsec<<=1) { if((fd=socket(domain,type,protocol))<0) return -1; if(connect(fd,addr,alen)==0) return fd; close(fd); if(numsec<=MAXSLEEP/2) sleep(numsec); } return -1; }
调用如下:
/* 初始化服务器端(对方)的地址和端口信息 */ bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(atoi(argv[2])); if (inet_aton(argv[1], (struct in_addr *) &dest.sin_addr.s_addr) == 0) { perror(argv[1]); exit(errno); } if((sockfd=connectRetry(AF_INET,SOCK_STREAM,0,(struct sockaddr *)&dest,sizeof(dest),128))==-1) { perror("connect retry"); exit(1); }
3.头文件
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <sys/time.h>
#include <sys/resource.h>
相关文章推荐
- Spring利用JDBCTemplate实现批量插入和返回id
- 【Leetcode】之Merge Two Sorted Lists
- 分享大数据视频教程
- jquery中attr和prop的区别分析
- Android Bundle类
- JAVA异常处理机制
- Sublime Text快捷键和使用技巧
- 王总QQ聊天对话
- Eclipse离线安装 Genymotion
- 11.20开幕:Oracle + MySQL 嘉年华群星云集
- 我为什么要参加马拉松
- OSX下Xcode更新后,Git提示确认证书
- 关于hint
- MapReduce编程实现txt文件中的内容导入HBase
- 图像处理中不适定问题(转)
- target specifies product type 'com.apple.product-type.bundle.ui-testing'
- 最近WEB安全扫描问题汇总(网上找的,觉的挺详细的)
- jquery validate.js表单验证入门实例(附源码)
- HTML的font标签使用的注意的事项
- Oracle分析函数