博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
练习C之SELECT形式的非阻塞IO
阅读量:6693 次
发布时间:2019-06-25

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

呵呵,理解得不深,但毕竟手打全版,且无错。但select.h不知何处找头文件,

粘下来作个记录。

POLL,EPOLL感觉代码类似,只是函数和系统实现不一样,,EPOLL目前最合理的。定位精确,算法复杂度最好。

#include "select.h"#include 
#include
#include
#include
#include
#include
#include
#include
typedef struct _CLIENT{ int fd; struct sockaddr_in addr;} CLIENT;#define MYPORT 59000#define BACKLOG 5CLIENT client[BACKLOG];int currentClient = 0;#define REVLEN 10char recvBuf[REVLEN];void showClient();int main(){ int i, ret, sinSize; int recvLen = 0; fd_set readfds, writefds; int sockListen, sockSvr, sockMax; struct timeval timeout; struct sockaddr_in server_addr; struct sockaddr_in client_addr; for(i=0; i
0) { FD_SET(client[i].fd, &readfds); if(sockMax
0 && FD_ISSET(client[i].fd, &readfds)) { if(recvLen != REVLEN) { while(1) { ret = recv(client[i].fd, (char *)recvBuf+recvLen, REVLEN-recvLen, 0); if(ret == 0) { client[i].fd = -1; recvLen = 0; break; } else if(ret < 0) { client[i].fd = -1; recvLen = 0; break; } recvLen = recvLen + ret; if(recvLen < REVLEN) { continue; } else { printf("%s, buf = %s\n", inet_nota(client[i].addr.sin_addr), recvBuf); recvLen = 0; break; } } } } } if(FD_ISSET(sockListen, &readfds)) { printf("isset\n"); sockSvr = accept(sockListen, NULL, NULL); if(sockSvr == -1) { printf("accept error\n"); } else { currentClient++; } for(i=0; i< BACKLOG; i++) { if(client[i].fd < 0) { client[i].fd = sockSvr; client[i].addr = client_addr; printf("You got a connection from %s \n", inet_ntoa(client[i].addr.sin_addr)); break; } } } } printf("test\n"); return 0;}void showClient(){ int i; printf("client count = %d\n", currentClient); for(i=0; i

 

转载地址:http://uucoo.baihongyu.com/

你可能感兴趣的文章
项目积累demo-01
查看>>
JAVA面向对象编程深入理解图
查看>>
jsp与jsp之间传参数如何获取
查看>>
如何做好一名售前工程师 [理论]
查看>>
什么是语法糖?
查看>>
rabbitMQ的安装和创建用户
查看>>
Struts2笔记——第一个实例HelloWorld
查看>>
Maven安装
查看>>
2.1列表相关知识点
查看>>
OpenStack images
查看>>
xsigo systems
查看>>
ofbiz ins
查看>>
iOS动画实现改变frme和contenOffset
查看>>
DroidPilot使用第一步 - 安装
查看>>
0059-乘积问题
查看>>
2019年的第一篇随笔
查看>>
关于公网ip的一些信息(摘抄)
查看>>
5分钟弄懂Docker!
查看>>
BZOJ1076:[SCOI2008]奖励关(状压DP,期望)
查看>>
BZOJ2223/3524:[POI2014] Couriers(主席树)
查看>>