基于select服务器简单实现

涉及的点:

  • select函数
  • 对监控的文件描述符集合操作函数
int select(	int nfds, 
			fd_set *readfds, 
			fd_set *writefds,
            fd_set *exceptfds, 
            struct timeval *timeout);
 
    nfds:     	监控的文件描述符集里最大文件描述符加1,告诉内核检测前多少个文件描述符的状态
    readfds:   文件描述符集合,读数据到达,传入传出参数
    writefds:  文件描述符集合,写数据到达,传入传出参数
    exceptfds: 监控异常发生到达文件描述符集合,如带外数据到达异常,传入传出参数
    timeout:   定时阻塞监控时间,3种情况
                1.NULL,永远等下去
                2.设置timeval,等待固定时间
                3.设置timeval里时间均为0,检查描述字后立即返回,轮询
    struct timeval {
   
        long tv_sec; /* seconds */
        long tv_usec; /* microseconds */
    };
对监控的文件描述符集合操作:
    void FD_CLR(int fd, fd_set *set); //把文件描述符集合里fd清0
    int FD_ISSET(int fd, fd_set *set); //测试文件描述符集合里fd是否置1
    void FD_SET(int fd, fd_set *set); //把文件描述符集合里fd位置1
    void FD_ZERO(fd_set *set);         //把文件描述符集合里所有位清0
成功:
	返回就绪(可读、可写、异常)文件描述符的总数。
超时:
	返回0.
失败:
	返回-1,设置errno
收到信号:
	返回-1,errno = EINTR

在这里插入图片描述

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <ctype.h>

#include
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值