Linux下TCP网络服务器实现源代码(6)
2009-05-13 01:20:11来源:未知 阅读 ()
fd1=socket();//创建一个socket
fd2=socket();//创建一个socket
while(1){
FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_SET(fd1,&readfds);
FD_SET(fd2,&writefds);
timeout.tv_sec=1;
timeout.tv_uec=0;
ret=select(fd1>fd2?(fd1+1):(fd2+1),&readfds,&writefds,NULL,&timeout);
if(ret<0){printf("系统错误,select出错,错误代码:%d,错误信息:%s",errno,strerror(errno));}
elseif(ret==0){printf("select超时返回,没有任何句柄状态发生变化!");}
//有句柄状态发生了变化
if(FD_ISSET(fd1,&readfds)){
fd1有数据可读;
fd1里的数据被读出来;
}
if(FD_ISSET(fd2,&writefds)){
fd2可写;
fd2里发送数据给对方;
}
}
/*----------------------示意代码结束--------------------------------------------*/
经常用到的几个自定义函数:
1、开启监听的函数
/*----------------------源代码代码开始--------------------------------------------*/
int
OpenSCPServer(intport,inttotal,intsendbuflen,intrecvbuflen,intblockORnot,intreuseORnot){
/*************************关于本函数************************************
*function_name:OpenSCPServer
*参数说明:port整数型监听端口号,total整数型监听个数,sendbuflen整数型发送缓冲区大小
*recvbuflen整数型接收缓冲区大小,blockORnot整数型是否阻塞,reuseORnot整数型是否端口重用
*purpose:用来建立一个tcp服务端socket
*tidiedby:zhoulifa(zhoulifa@163.com)周立发(http://zhoulifa.bokee.com)
Linux爱好者Linux知识传播者SOHO族开发者最擅长C语言
*datetime:2006-07-0520:00:00
*Note:任何人可以任意复制代码并运用这些文档,当然包括你的商业用途
*但请遵循GPL
*Thanksto:PaulSheer感谢PaulSheer在select_tut的man手册里提供了这份源代码
*Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力
*Note:要使用此函数需要自定义一个全局变量charerrorMessage[1024];并包含GetCurrentTime.h头文件
*********************************************************************/
intsockfd=0,ret=0,opt=0,flags=1;
structsockaddr_inladdr;
ret=sockfd=socket(PF_INET,SOCK_STREAM,0);
if(ret<0){
sprintf(errorMessage,"OpenTCPServersocket()error!return:%d,errno=%d,errortext:'%s'%s",ret,errno,strerror(errno),GetCurrentTime(0,0));
return-1;
}
ret=setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&reuseORnot,sizeof(int));
if(ret<0){
sprintf(errorMessage,"OpenTCPServersetsockopt()reuseerror!return:%d,errno=%d,errortext:'%s'%s",ret,errno,strerror(errno),GetCurrentTime(0,0));
return-2;
}
ret=setsockopt(sockfd,SOL_SOCKET,SO_RCVBUF,&recvbuflen,sizeof(int));
if(ret<0){
sprintf(errorMessage,"OpenTCPServersetsockopt()recvbuferror!return:%d,errno=%d,errortext:'%s'%s",ret,errno,strerror(errno),GetCurrentTime(0,0));
return-3;
}
ret=setsockopt(sockfd,SOL_SOCKET,SO_SNDBUF,&sendbuflen,sizeof(int));
if(ret<0){
sprintf(errorMessage,"OpenTCPServersetsockopt()sendbuferror!return:%d,errno=%d,errortext:'%s'%s",ret,errno,strerror(errno),GetCurrentTime(0,0));
return-4;
}
ioctl(sockfd,FIONBIO,&blockORnot);/*blockornot*/
laddr.sin_family=PF_INET;
laddr.sin_port=htons(port);
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有