找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4412|回复: 4

关于使用 ACE_Proactor 做的服务器端与客户端交互的问题

[复制链接]
发表于 2009-8-10 14:53:52 | 显示全部楼层 |阅读模式
客户端与服务器端建立连接,然后客户端发送消息给服务器端,但当长时间客户端没有发消息时,服务器端根据设置的超时会把连接给断掉,
如下:

        if (this->handle() != ACE_INVALID_HANDLE)               
        {
                ACE_Proactor::instance()->cancel_timer(*this,1);

                //放这里好吗?
                m_reader->cancel();
                m_writer->cancel();

                //显示客户端连接地址和端口
                //DisplayInfo(this->handle(), " disconnected.");
                ACE_OS::shutdown(this->handle(),SD_BOTH);
                ACE_OS::closesocket( this->handle() );
                this->handle(ACE_INVALID_HANDLE);
        }

而对应的此处理器并没有释放掉,而是返回给了上级等待有其他连接时再次使用。

在现在这种断开的情况下,客户端再次向服务器端发送消息,居然能发送,而且在 handle_write_stream 中的 result.success() 居然也成功了,不明白为什么???
当再发送第二条消息时,就能识别出来已经断开了。
 楼主| 发表于 2009-8-10 14:56:20 | 显示全部楼层
还有请指点一下
我到底怎么做才能确保我发送的内容对方接收到了?
才能保证发送内容的正确性呢?
谢谢~~
发表于 2009-8-11 10:38:54 | 显示全部楼层
先用工具查一下连接是否还存在,
另楼主确认关闭的代码执行到了么?
 楼主| 发表于 2009-8-11 11:45:56 | 显示全部楼层

回复 #3 modern 的帖子

跟了一下,上面写的那段 关闭代码 确实是执行到了的~~~
有可能说关闭了一边,而连接还存在的情况出现吗?
谢谢~~
发表于 2009-8-12 10:40:12 | 显示全部楼层
我的意思是用工具检查一下,
在楼主确认调用了关闭函数之后,
TCP连接的状态。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-23 00:14 , Processed in 0.013236 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表