当前位置: 技术问答>linux和unix
使用EPOLL时发送数据的问题
来源: 互联网 发布时间:2016-12-31
本文导语: EPOLL发送数据为什么总是无法完整发送呢? EPOLL ET模式,socket为非阻塞 服务器需要发送一个很大的包时,会把包拆分为很多小包,然后一个一个发.发送的过程中有时候会出现EAGAIN错误.出现这个错误了怎么处理?引起这个错...
EPOLL发送数据为什么总是无法完整发送呢?
EPOLL ET模式,socket为非阻塞
服务器需要发送一个很大的包时,会把包拆分为很多小包,然后一个一个发.发送的过程中有时候会出现EAGAIN错误.出现这个错误了怎么处理?引起这个错误的小包是发过去了还是没发过去?
有没有人能给一个EPOLL的使用示例?感激不尽.
EPOLL ET模式,socket为非阻塞
服务器需要发送一个很大的包时,会把包拆分为很多小包,然后一个一个发.发送的过程中有时候会出现EAGAIN错误.出现这个错误了怎么处理?引起这个错误的小包是发过去了还是没发过去?
有没有人能给一个EPOLL的使用示例?感激不尽.
|
不仅仅是返回-1,返回的字节数小于你发送的字节数,也应该设置EPOLLOUT。
|
EAGAIN就是EWOULDBLOCK,说明缓冲区满了,这时候你就应该给这个套接字设置EPOLLOUT,等到该套接字EPOLL返回可写的时候写出剩下的数据。
|
EAGAIN不要把它看成错误。只是表明当前数据操作无法完成,你需要你重试。
|
原理是这样的,你需要实现tcp_send函数,它首先检查该套接字tcpbuffer,如果内部有数据,则将这次的package拷贝到buffer末尾,然后返回。 如果tcpbuffer没有数据,则直接调用send发送该package,并判断实际送出字节,如果实际送出字节