您的位置:首页 > 其它

My Network programming library

2015-11-10 10:04 288 查看
1.服务器初始化函数

/********************************************************************
函数名:服务器初始化函数
参考: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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: