linux网络编程之poll
来源:互联网 发布:说说人工智能喜马拉雅 编辑:程序博客网 时间:2024/06/05 11:28
#include<netinet/in.h>
#include<sys/socket.h>
#include<sys/poll.h>
#include<unistd.h>
#include<stdio.h>
#define FD_SIZE 1024
struct pollfd fds[FD_SIZE];
int fd_num = 0;
int add(int fd,short events)
{
int i=0;
for(;i<FD_SIZE;++i)
{
if(0==fds[i].fd)
{
fds[i].fd = fd;
fds[i].events = events;
++fd_num;
return 0;
}
}
return -1;
}
int clr(int fd)
{
int i=0;
for(;i<FD_SIZE;++i)
{
if(fds[i].fd==fd)
{
fds[i].fd = 0;
fds[i].events = 0;
--fd_num;
}
}
}
void main()
{
memset(fds,0,sizeof(fds));
int sock = socket(AF_INET,SOCK_STREAM,0);
if(-1==sock)
{
perror("create socket failed");
return;
}
int reuse = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(sock,(struct sockaddr*)&sin,sizeof(sin))<0)
{
perror("bind failed");
return;
}
listen(sock,5);
add(sock,POLLIN);
while(1)
{
struct pollfd temp_fds[FD_SIZE];
memcpy(&temp_fds,&fds,sizeof(fds));
int ret = poll(&temp_fds,fd_num,100000);
if(ret<0) break;
else if(ret==0)
{
continue;
}
int i=0;
for(;i<FD_SIZE;++i)
{
if(temp_fds[i].fd == sock && (temp_fds[i].revents & POLLIN))
{
struct sockaddr_in client_addr;
int sockaddr_len = sizeof(client_addr);
int fd = accept(sock,&client_addr,&sockaddr_len);
add(fd,POLLIN);
printf("accept new conn\n");
}
else if(temp_fds[i].revents & POLLIN)
{
char buf[100];
memset(buf,0,sizeof(buf));
recv(temp_fds[i].fd,buf,100,0);
printf("recv data:%s\n",buf);
}
}
}
}
#include<sys/socket.h>
#include<sys/poll.h>
#include<unistd.h>
#include<stdio.h>
#define FD_SIZE 1024
struct pollfd fds[FD_SIZE];
int fd_num = 0;
int add(int fd,short events)
{
int i=0;
for(;i<FD_SIZE;++i)
{
if(0==fds[i].fd)
{
fds[i].fd = fd;
fds[i].events = events;
++fd_num;
return 0;
}
}
return -1;
}
int clr(int fd)
{
int i=0;
for(;i<FD_SIZE;++i)
{
if(fds[i].fd==fd)
{
fds[i].fd = 0;
fds[i].events = 0;
--fd_num;
}
}
}
void main()
{
memset(fds,0,sizeof(fds));
int sock = socket(AF_INET,SOCK_STREAM,0);
if(-1==sock)
{
perror("create socket failed");
return;
}
int reuse = 1;
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse));
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(3000);
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
if(bind(sock,(struct sockaddr*)&sin,sizeof(sin))<0)
{
perror("bind failed");
return;
}
listen(sock,5);
add(sock,POLLIN);
while(1)
{
struct pollfd temp_fds[FD_SIZE];
memcpy(&temp_fds,&fds,sizeof(fds));
int ret = poll(&temp_fds,fd_num,100000);
if(ret<0) break;
else if(ret==0)
{
continue;
}
int i=0;
for(;i<FD_SIZE;++i)
{
if(temp_fds[i].fd == sock && (temp_fds[i].revents & POLLIN))
{
struct sockaddr_in client_addr;
int sockaddr_len = sizeof(client_addr);
int fd = accept(sock,&client_addr,&sockaddr_len);
add(fd,POLLIN);
printf("accept new conn\n");
}
else if(temp_fds[i].revents & POLLIN)
{
char buf[100];
memset(buf,0,sizeof(buf));
recv(temp_fds[i].fd,buf,100,0);
printf("recv data:%s\n",buf);
}
}
}
}
0 0
- linux网络编程之 poll
- linux网络编程之 poll
- Linux网络编程之poll
- linux网络编程之poll
- Linux网络编程poll模型
- Linux网络编程poll模型
- Linux网络编程/poll服务器
- Linux/Unix IO多路复用之poll网络编程(含源码)
- Linux/Unix IO多路复用之poll网络编程(含源码)
- Linux网络编程---I/O复用模型之poll
- Linux/Unix IO 多路复用之poll网络编程
- linux网络编程 select,poll,epoll模型
- linux网络编程poll与epoll区别
- Linux网络编程--poll()和ppoll()函数
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- linux网络编程之socket(十三):epoll 系列函数简介、与select、poll 的区别
- Linux网络编程之socket:select函数的并发限制与poll函数
- 软件测试缺陷密度的计算方法
- python写xml
- 开博第一篇,新的征程...
- MIT6.828 HW8 uthreads
- Java JDK1.8新特性Lambda 表达式
- linux网络编程之poll
- Timestamp 插入数据库问题
- Java读取/写入Yaml配置文件
- PAT乙级—1010. 一元多项式求导 (25)-native
- leetcode 29. Divide Two Integers
- React Native 植入原生应用
- PHP 批量插入数据三种方法性能比较
- Centos系统备份与恢复教程
- iOS -关于Xcode中的单元测试unitTest的使用