多路IO转接poll模型

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值