多路IO转接poll模型

    xiaoxiao2023-09-28  143

    poll函数

    int poll(struct pollfd *fds, nfds_t nfds, int timeout); fds:监听的文件描述符【数组】 struct pollfd { int fd:待监听的文件描述符 short events:待监听的文件描述符对应的监听事件 取值:POLLIN、POLLOUT、POLLERR short revents: 传入时, 给0。如果满足对应事件的话, 返回 非0 --> POLLIN、POLLOUT、POLLERR } nfds: 监听数组的实际有效监听个数。 timeout: > 0: 超时时长。单位:毫秒。 -1: 阻塞等待 0: 不阻塞 返回值:返回满足对应监听事件的文件描述符总个数。 优点: 自带数组结构。 可以将监听事件集合和返回事件集合分离。 拓展监听上限。 超出 1024限制。 缺点: 不能跨平台。 Linux 无法直接定位满足监听事件的文件描述符, 编码难度较大。

    read 函数返回值说明

    > 0: 实际读到的字节数 =0: socket中,表示对端关闭。close() -1:如果 errno == EINTR 被异常终端。 需要重启。 如果 errno == EAGIN 或 EWOULDBLOCK 以非阻塞方式读数据,但是没有数据。需要再次读。 如果 errno == ECONNRESET 说明连接被重置。需要 close(),移除监听队列。 错误。

    在实际的使用中,更多的是使用epoll模型。

    最新回复(0)