博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于epoll的tcpip的服务端
阅读量:4962 次
发布时间:2019-06-12

本文共 2522 字,大约阅读时间需要 8 分钟。

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define SA struct sockaddrint main(int argc, const char *argv[]){ //socket int sockfd=socket(AF_INET,SOCK_STREAM,0); if(sockfd==-1) { perror("fail to socket"); exit(1); } struct sockaddr_in myaddr,peeraddr; myaddr.sin_family=AF_INET; myaddr.sin_port=htons(50000); myaddr.sin_addr.s_addr=inet_addr("0.0.0.0"); socklen_t len=sizeof(peeraddr); char buf[128]; int confd; //bind int ret_bind=bind(sockfd,(SA*)&myaddr,sizeof(myaddr)); if(ret_bind<0) { perror("fail to bind"); exit(1); } int ret_lis=listen(sockfd,5); if(ret_lis<0) { perror("fail to listen "); exit(1); } // man 7 epoll //select 闂 //锛�1锛� 鍙嶅杩涜鐢ㄦ埛绌洪棿鍜屽唴鏍哥┖闂寸殑鏁版嵁浜ゆ崲 锛堝~鍏呰〃锛� //锛�2锛� 鏃犳剰涔夌殑閬嶅巻 锛坕<= maxfd锛� //epoll 涓€娆℃坊鍔犳枃浠舵弿杩扮锛屼笉闇€瑕佸啀娣诲姞浜� //灏辩华鐨勭粨鏋滃皢杩斿洖鍒颁竴涓暟缁勪腑锛屼笉闇€瑕侀亶鍘� //select 缂虹偣 鎭板ソ姝f槸 epoll 鐨勪紭鐐� // 閫傚悎杈圭紭瑙﹀彂鍜屾潯浠惰Е鍙戠殑 // 閫傚悎鐩戞帶 澶ч噺鐨勬枃浠舵弿杩扮 //epoll_create 鍒涘缓epoll instance 杩斿洖鏂囦欢鎻忚堪绗� -->open creat //鍏冲績鐨勬枃浠舵弿杩扮 閫氳繃 epoll_ctl 鏉ユ敞鍐岋紙鍒犻櫎锛� --> FD_SET FD_CLR //epoll_wait 鐩戞祴绛夊緟鏂囦欢鎻忚堪绗﹀氨缁� ---> select // //epoll_create(size) int epfd=epoll_create(50); 鍒涘缓鎻忚堪绗� // size 鏄竴涓猦int 涓嶅鐨勬椂鍊欏唴鏍歌嚜宸辩湅鐫€鍔� // 楠椾汉鐨勶細 鏂板唴鏍稿彲浠ワ紝灏卞唴鏍歌鍑洪敊鐨勶紒锛侊紒锛侊紒锛侊紒 // // uname -a 3.13 鏃у唴鏍哥壒鎬т笉鏀寔hint // 鏃у唴鏍镐笉澶燂紝澶氬啓鐐� if(epfd<0) { perror("fail to epoll create"); exit(1); } //epoll_ctl(int epfd, int op, int fd, struct epoll_event *event) //1. epoll鐨刦d //2. 鎿嶄綔鐨勫畯(EPOLL_CTL_ADD(澧炲姞) EPOLL_CTL_MOD(淇敼) EPOLL_CTL_DEL(鍒犻櫎) ) //3. 瑕�(鎿嶄綔)鐨勬枃浠舵弿杩扮 //4.鏂囦欢鎻忚堪绗﹀搴旂殑鎿嶄綔缁撴瀯浣�#if 0 typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ };#endif struct epoll_event ev; ev.events=EPOLLIN;//璇昏祫婧愮浉鍏� ev.data.fd=0; if(-1==epoll_ctl(epfd,EPOLL_CTL_ADD,0,&ev)) { perror("fail to add 0"); exit(1); } ev.events=EPOLLIN;//璇昏祫婧愮浉鍏� ev.data.fd=sockfd; if(-1==epoll_ctl(epfd,EPOLL_CTL_ADD,sockfd,&ev)) { perror("fail to add sockfd"); exit(1); } struct epoll_event events[50]; while(1) { //epoll_wait // 1. epfd // 2. 杩斿洖灏辩华缁撴灉鐨勬暟缁勫悕 struct epoll_event []; // 3. 鏁扮粍鍏冪礌鐨勪釜鏁� // 4. 瓒呮椂淇℃伅 -1 涓嶈秴鏃� // 杩斿洖鍊� 灏辩华鐨勬枃浠舵弿杩扮鐨勪釜鏁� int nfds=epoll_wait(epfd,events,50,-1); if(nfds<0) { perror("fail to epoll wait"); exit(1); } else //鏈夊氨缁� 鎸夌収椤哄簭 灏嗗氨缁粨鏋滅殑鏂囦欢鎻忚堪绗� 鏀惧叆鍒癳vents[0] ~ events[ndfs-1] 閲岄潰 { int i; for(i=0;i

转载于:https://www.cnblogs.com/yepc/p/10892949.html

你可能感兴趣的文章
HDU-1171 Big Event in HDU(生成函数/背包dp)
查看>>
Babel 是干什么的
查看>>
cocos2dx-3.0(8)------Label、LabelTTF、LabelAtlas、LabelBMFont使用之法
查看>>
Mysql数据库乱码总结
查看>>
BZOJ.3160.万径人踪灭(FFT Manacher)
查看>>
CODE[VS] 1842 递归第一次
查看>>
20180418小测
查看>>
Spring Cloud是怎么运行的?
查看>>
12 联结表
查看>>
数字三角形
查看>>
NGUI 减少drawcall规则
查看>>
三元表达,匿名函数
查看>>
前端笔记-基础笔记
查看>>
【LeetCode & 剑指offer刷题】查找与排序题6:33. Search in Rotated Sorted Array(系列)
查看>>
GNU/Linux超级本ZaReason Ultralap 440体验
查看>>
将github上托管的代码 在我的域名下运行
查看>>
【Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C】Equalize
查看>>
【codeforces 767A】Snacktower
查看>>
【MemSQL Start[c]UP 3.0 - Round 1 C】 Pie Rules
查看>>
Ognl中“%”、“#”、“$”详解
查看>>