boost.asio是搞笑来的?

pker911 2011-12-06 02:13:56
不说了,官方example\echo\async_tcp_echo_server.cpp
开2个客户端用telnet方式连上echo_server,长时间后关掉telnet后,echo_server竟然不会断开客户端?
而且在echo_server的机器上用netstat -ano -p tcp查看,服务端于客户端的连接还处于ESTABLISHED状态,这就是所谓的终极网络库?搞笑的吧!

用asio到商业项目的大牛来解释下?
...全文
25442 77 打赏 收藏 转发到动态 举报
写回复
用AI写文章
77 条回复
切换为时间正序
请发表友善的回复…
发表回复
۞边城浪子 2014-08-26
  • 打赏
  • 举报
回复
我不用这个 觉得还不如我自己写
赵4老师 2014-06-23
  • 打赏
  • 举报
回复
系统越复杂,越不可靠。
LittleNumb 2014-06-23
  • 打赏
  • 举报
回复
有讨论才会有进步,文明回复啊! 标题也别这么嚣张,提个问题而已! 程序员肝火旺,多喝点清火的菊花茶!
兔形怪兽 2014-05-16
  • 打赏
  • 举报
回复
虽然年代久远,但是看完依然心潮澎湃!原来程序员也可以骂的这么Hi~ttp://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/1.gif][/img]的这么Hi~
iori3312 2014-02-15
  • 打赏
  • 举报
回复
楼主你的这种现象可能网络中间有防火墙或者其他软硬件设备,你把两个应用都放在同一台机器,就不会出现你描述的这种现象了
hslinux 2014-02-10
  • 打赏
  • 举报
回复
LZ想多了。demo只是简单的把功能演示一下而已。其他异常还需要自己处理。 网络的异常关闭还需要其他机制配合检测的。譬如说发心跳包。
kaflash 2014-02-09
  • 打赏
  • 举报
回复
非正常断开是状态变化需要很长时间,这不是asio的问题,asio只是延续了这种实现方式而已。 因为其实到时间确实是会给断开状态的,唯一的问题只是这个时间长了一点而已。 所以,如果自己需要一个快速判断的非正常断开状态,就必须自己做一个。 这种使用者才能确定的东西,他们不做很正常。而且如果需要自己做个检测也很简单 这架构是针对开发者的, 只是为了简化你的工作而不是代替你开发。 如果纯粹只使用而不知其所以然,最好不要妄加评价。因为你根本不知道是不是真的是做的不对还是本来就这样的。
MongooseKnight 2014-01-20
  • 打赏
  • 举报
回复
引用 17 楼 wjb_yd 的回复:
还有,你说话的语气太冲了。 CSDN上没人欠你的,大家愿意跟你讨论问题是看的起你。 asio的作者们也不欠你的,你不愿意用,就滚!
这人好嚣张啊,说的好!
rockuam 2013-12-24
  • 打赏
  • 举报
回复
大家都好NB的感觉,正在学习网络编程飘过。
mengxingxia 2013-12-24
  • 打赏
  • 举报
回复
1、嗯,确实需要做个有风度的程序员。懂得人,有时间就好好解释解释,让人得到你的帮助,看到你的高深,而不是在那骂人。其它说让人看书的,为什不不推荐那本的合适的书出来。 2、楼主是在看asio的例子,这说明,楼主也在学习,既然是学习,就要虚心的学习。而其他人看得起的好好回复,看不起的路过就算了
xiaobadu 2013-12-24
  • 打赏
  • 举报
回复
文明争论,做个有绅士风度的程序员
gao8776291 2013-11-29
  • 打赏
  • 举报
回复
引用 61 楼 firerun 的回复:
boost的垃圾之处在于,它的error_code是一个类,这样我打印出了错误码是system:10053 我想用错误码做判断,可是我没找着这个错误的枚举或者定义, 而且我没找着这个的时候是没法做判断的。
ec.message()
TrueUgly 2013-11-01
  • 打赏
  • 举报
回复
引用 61 楼 firerun 的回复:
boost的垃圾之处在于,它的error_code是一个类,这样我打印出了错误码是system:10053 我想用错误码做判断,可是我没找着这个错误的枚举或者定义, 而且我没找着这个的时候是没法做判断的。
你说的这个在windows上直接用微软提供的FormatMessage函数即可得到匹配的错误信息,asio在windows上的错误码都是windows提供的....
firerun 2013-10-26
  • 打赏
  • 举报
回复
boost的垃圾之处在于,它的error_code是一个类,这样我打印出了错误码是system:10053 我想用错误码做判断,可是我没找着这个错误的枚举或者定义, 而且我没找着这个的时候是没法做判断的。
rsdtt 2013-10-25
  • 打赏
  • 举报
回复
楼主的主意应该是说boost的封装不带这种断开检测是不行的,但是很多人就抓着底层底层的来高傲
firerun 2013-10-25
  • 打赏
  • 举报
回复
有些人即不能解决问题,也不能指出问题出在哪里,只会说大道理。 这种人在这个楼里出现的特别多。 我碰到了和33楼一样的问题,因为我的程序不可能用异步,所以至今问题没解决。 我对boost不是很熟悉,但是boost确实封装的不够完善。
davidyu720 2013-10-10
  • 打赏
  • 举报
回复
如果netstat显示 ESTABLISHED,那说明操作系统的TCP协议栈都没有识别到连接断开,当然boost asio就更没法知道网络断开了!
davidyu720 2013-10-10
  • 打赏
  • 举报
回复
公网啊?一切皆有可能。 先用简单的内网环境测试吧。
zdleek 2013-10-10
  • 打赏
  • 举报
回复
引用 16 楼 wjb_yd 的回复:
[Quote=引用 14 楼 pker911 的回复:] 算了,不跟你解释了,你自己试下官方那个例子就知道了! 在telnet连上server后: 1、很短时间内关闭telnet,此时server会调用handle_read,因为有error_code,所以自动delete this,一切正常; 2、很长时间后关闭telnet(我是过了1晚上,大概10-12小时),同样关闭telnet,此时server不会调用handle_read,更无err…… [/Quote] 真厉害,你应该让写boost的人都滚蛋,然后你去实现asio。 麻烦你喷asio之前,先用wireshark看看你关闭telnet的时候fin到底发没发。 另外你对KEEP_ALIVE的触发条件理解有误,麻烦你还是再去看看书吧。 啥都不懂,就上来喷,服了你了。
说的有理 楼主显然还是有不少方面理解的不够深刻
changecode 2013-09-28
  • 打赏
  • 举报
回复
路过。心跳包也许适合楼主。
加载更多回复(47)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧