linux poll实例,LINUX服务-POLL函数实例.doc

LINUX服务-POLL函数实例

//LINUX服务器聊天消息转发,使用POLL函数的实例

#include

#include

#include

#include

#include

#include

#define BUFFSIZE 65536

#define CNUM 4

struct Client

{

int Cid;

unsigned short Cport;

unsigned int Cs_addr;

};

main()

{

struct Client c[CNUM]={0};

int iClient=0;

struct sockaddr_in iAddr={0};

iAddr.sin_family=AF_INET;

iAddr.sin_port=htons(60000);

iAddr.sin_addr.s_addr=0;

int iSock=socket(PF_INET,SOCK_STREAM,0);

int ibind=bind(iSock,(struct sockaddr*)&iAddr,sizeof(iAddr));

if(ibind==-1)

{

perror("Bind error\n");

return;

}

int ilisten=listen(iSock,10);

if(-1==ilisten)

{

perror("Listen error\n");

}

int iuse=1;

setsockopt(iSock,SOL_SOCKET,SO_REUSEADDR,&iuse,sizeof(int));

struct sockaddr_in uAddr={0};

int uLen=sizeof(uAddr);

int iRecv,iSend;

struct pollfd server[10]={0};

server[0].events=POLLIN;

server[0].fd=iSock;

int iMax=0;

printf("服务器启动\n");

while(1)

{

int ifor=0;

int iPoll=poll(server,iMax+1,-1);

for(;ifor

{

if(iPoll>0)

{

if(server[ifor].revents)

{

if(server[ifor].fd==iSock)

{

char buf[100]={0};

int uSock=accept(iSock,(struct sockaddr*)&uAddr,&uLen);

memset((char*)buf,0,100);

int cfor=0;

for(;cfor

{

if(c[cfor].Cid==0)

{

c[cfor].Cid=uSock;

c[cfor].Cport=uAddr.sin_port;

c[cfor].Cs_addr=uAddr.sin_addr.s_addr;

iClient++;

break;

}

}

int ufor=0;

int flag=0;

for(;ufor

{

if(server[ufor].fd==0)

{//iMax++;

server[ufor].fd=uSock;

server[ufor].events=POLLIN;

flag=1;

break;

}

}

if(flag==0)//有的话就挂上刚刚的连接

{

iMax++;

server[iMax].fd=uSock;

server[iMax].events=POLLIN;

}

//显示连接端口信息

printf("Connect:%

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值