游戏服务器中很多平台都会要求进行数据上报,数据上报都是使用http协议。我们游戏服务器的网络都是自己实现的,没有使用第三方网络库,所以在进行数据上报的时候也就自己用c++实现简单的http请求。由于网络一直都是使用EPOLLRDHUP作为断开网络处理,该事件会比使用EPOLLIN和EPOLLOUT高效,但是在http协议中使用的时候可能会存在问题。EPOLLRDHUP表示的是对方读挂起,可能对方还可以写数据,所以当触发该事件的时候可能网络中还有数据未处理,这在和客户端通信的时候丢掉几个包不处理是没有问题的,但是http在使用Connection: close标记的时候就会同时触发EPOLLIN和EPOLLRDHUP这样就会导致无法收到http的数据返回,所以当使用c++实现数据上报的时候使用EPOLLRDHUP可能会存在问题。
EPOLLRDHUP的坑
最新推荐文章于 2022-10-10 15:14:04 发布