c++异网处理文件尾
原文
网络通信的一端
主动调用shutdown/send
时,对端就会收到一个eof(文件尾)
错误,eof
并不是真正意义上网络错误
,只是表明对端
不会再发送
数据过来了,对端此时(在没有调用shutdown/recieve
的前提下)仍可接收
数据.但是,asio
把它归为网络错误
,则应该怎么处理该eof
错误呢?
空 干读()
{
动 本(从本共享());
套接字_.异步读些(提升::异网::缓冲(数据_,最大长度),[本,本](提升::系统::错误码 ec,大小型 长度){
如(!ec){
干写(长度);
}异{
关闭();
}
});
}
空 关闭(){
套接字_.关闭();
}
上面,直接关闭.
如果这时候正在发送异步数据
,这样直接关闭
可能会导致缓冲区
数据丢失,正确做法应是先调用shutdownsend
,再close
,这样保证先把缓冲区
数据发送完,再发送fin
给对端,这就是所谓的"优雅关闭
".
空 干读()
{//同前略
...
}
空 关闭(){
套接字_.关闭(异网::ip::传控::套接字::都关闭);//加上.
套接字_.关闭();
}
但未处理文件尾
.要如下处理:
空 干读()
{
动 本(从本共享());
套接字_.异步读些(提升::异网::缓冲(数据_,最大长度),
[本,本](提升::系统::错误码 ec,大小型 长度)
{
如(!ec)
{
干写(长度);
}异{
如(ec==异网::错误::文件尾&&长度>0){
动 回复数据=处理(数据_,长度);
响应(回复数据);
}//加上
关闭();
}
});
}
空 关闭(){
套接字_.关闭(异网::ip::传控::套接字::都关闭);
套接字_.关闭();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现