linux 网络服务器 源码下载,Linux下TCP网络服务器实现源代码(6)

Linux下TCP网络服务器实现源代码(6)

2009-05-13 01:20:11来源:未知 阅读 ()

c4468b3f4df77e96b0a416fa2a870fba.png

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

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值