本文主要是介绍关于检测客户端是否断开连接,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
做了五个月的游戏服务端,发现游戏的后端比其他的要求更高。
游戏服务端在运行过程中需要保证连接的实时性,所以要判断客户端连接的实时性,在博客里搜索大概就是三种方案:
1.setsockopt 设置 SO_KEEPALIVE
int flag = 1;setsockopt(sock,SOL_SOCKET,SO_KEEPALIVE,&flag,sizeof(flag));
但这个两个小时才判断一次,肯定不能保证实时性。
2.setsockopt 设置 SO_KEEPALIVE ,更改参数,设置成更短的时间
3.自己写一个心跳机制 heartbeat
23虽然缩短了时间,但是几秒一次也是满足不了实时性的。
就只有用到 epoll_wait 的时候,断开连接会触发 EPOLLIN 的属性:
接收时接收大小为0表示客户端断开(不可能有0数据包触发
EPOLLIN),-1表示异常,针对errorno进行判断可以确定是合理
异常还是需要终止的异常,>0而不等于缓冲区大小表示单次发送结
束。
嗯,这个是可以保证极大的实时性的,完全 ojbk
搞半天这是规定,TCP/IP卷上写的:
结束报文段就是 read 到 0 的消息。
好吧,还是多看书吧
这篇关于关于检测客户端是否断开连接的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!