`

ACE_Asynch_Connector应用的问题

阅读更多
ACE的DEMO程序有些问题:
如下:
int AIO_CLD_Connector::validate_connection
  (const ACE_Asynch_Connect::Result& result,
   const ACE_INET_Addr &remote, const ACE_INET_Addr&) {

  remote_addr_ = remote;
  if (!result.success ()) {
    ACE_Time_Value delay (retry_delay_);
    retry_delay_ *= 2;
    if (retry_delay_ > MAX_RETRY_DELAY)
      retry_delay_ = MAX_RETRY_DELAY;
    proactor ()->schedule_timer (*this, 0, delay);
    return -1;
  }
  retry_delay_ = INITIAL_RETRY_DELAY;

  if (ssl_ctx_ == 0) {
    OpenSSL_add_ssl_algorithms ();
    ssl_ctx_ = SSL_CTX_new (SSLv3_client_method ());
    if (ssl_ctx_ == 0) return -1;

    if (SSL_CTX_use_certificate_file (ssl_ctx_,
                                      CLD_CERTIFICATE_FILENAME,
                                      SSL_FILETYPE_PEM) <= 0
       || SSL_CTX_use_PrivateKey_file (ssl_ctx_,
                                       CLD_KEY_FILENAME,
                                       SSL_FILETYPE_PEM) <= 0
       || !SSL_CTX_check_private_key (ssl_ctx_)) {
      SSL_CTX_free (ssl_ctx_);
      ssl_ctx_ = 0;
      return -1;
    }
    ssl_ = SSL_new (ssl_ctx_);
    if (ssl_ == 0) {
      SSL_CTX_free (ssl_ctx_); ssl_ctx_ = 0;
      return -1;
    }
  }

  SSL_clear (ssl_);
#if defined (ACE_WIN32)
  // ACE_WIN32 is the only platform where ACE_HANDLE is not an int.
  // See ace/config-lite.h for the typedefs.
  SSL_set_fd (ssl_, reinterpret_cast<int> (result.connect_handle ()));
#else
  SSL_set_fd (ssl_, result.connect_handle ());
#endif /* ACE_WIN32 */
  SSL_set_verify (ssl_, SSL_VERIFY_PEER, 0);

  if (SSL_connect (ssl_) == -1
      || SSL_shutdown (ssl_) == -1) return -1;
  return 0;
}

void AIO_CLD_Connector::handle_time_out
(const ACE_Time_Value&, const void *) {
  connect (remote_addr_);
}

这段程序的本意,是在socket建立连接成功后,进行SSL的验证,如果连接失败,调用定时器重新连接。
但问题在红色标注的部分,如果第一次连接失败了,则这个地址是不确定的(文档说明),实际我测试,是0.0.0.0:0。
这样以来,其实是陷入了死循环,永无止境了。


分享到:
评论

相关推荐

    ACE继承层次图

    5. **ACE_Asynch_Operation**:异步操作接口,定义了异步I/O操作的基本方法。 - **ACE_Asynch_Accept**:用于异步接受连接。 - **ACE_Asynch_Read_Stream**:用于异步读取流数据。 - **ACE_Asynch_Write_Stream**...

    C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks

    - 文档中也提到了ACE框架中其他一些组件和类的概述,如ACE_Asynch_Read_Write、ACE_Asynch_Connector等,这些都是ACE框架中用于高效地实现网络通信的工具。 对于期望深入学习和掌握C++网络编程的开发者来说,本书...

    ace examples

    This package contains a number of ...use the following ACE library components. If you want to see how to program using ACE, this is the best place to start reading code and learning the ACE design.

    ACE自适配通信环境中文技术文档_中篇ACE程序员教程.pdf

    2. **ACE_Win32_Connector 和 ACE_SOCK_Connector**:它们在客户端端点用来发起连接到服务器的请求。 3. **ACE_Reactor**:这是ACE的核心事件处理机制,它管理了事件的注册、调度和分发,允许异步处理I/O事件和其他...

    ACE的SSL的VC工程文件

    **SSL_Asynch_Stream.cpp**、**SSL_Context.cpp**、**SSL_SOCK_Stream.cpp**、**SSL_SOCK_Connector.cpp**、**SSL_SOCK_Acceptor.cpp**、**SSL_Asynch_BIO.cpp**、**SSL_SOCK.cpp** 这些都是实现SSL功能的源代码文件...

    ACE开发指南

    - **ACE_Asynch_Connector**:用于异步发起连接请求。 - **Reactor与Proactor的比较**:Reactor更适用于传统的同步I/O操作,而Proactor则更适合异步I/O。 #### 5. ACE Task框架 - **Task框架**:提供了任务管理和...

    ACE 网络编程 Client 源码

    客户端源码可能会利用`ACE_Asynch_Read_Stream`和`ACE_Asynch_Write_Stream`进行非阻塞的数据读写,这样即使在等待数据传输期间,程序也能继续执行其他任务。 5. **异常处理(Exception Handling)** 在网络编程中,...

    ACE开发指南(初级)

    - **ACE_Asynch_Connector**:用于异步地建立到服务器的连接。 **4.3 Reactor与Proactor的区别** - **应用场景**:Reactor更适合于多路复用I/O事件;Proactor则更适合于处理大量的异步I/O操作。 - **处理方式**:...

    大华sdk开发辅助插件

    9. **权限管理**:对于企业级应用,SDK可能涉及权限控制,如用户认证、权限分配等,以确保只有授权的用户或应用才能访问和操作视频流。 10. **安全性**:考虑到数据安全,SDK可能提供了加密和解密机制,保护视频...

    linux ACE socket

    4. **输入/输出处理**:ACE提供了ASYNCH_Read_Strategy和ASYNCH_Write_Strategy,用于处理异步读写操作。在SSH客户端中,这些策略将用于接收服务器的响应和发送命令。 5. **事件循环**:使用ACE_Reactor或ACE_...

    modelsim6.6f ubuntu12.04 x86 破解补丁及破解过程

    4、使用6.6f_2文件夹中的mgls_asynch文件替代[安装路径]/modeltech/linux_rh60/mgls/lib/以及[安装路径]/modeltech/linux/mgls/lib/下的mgls_asynch文件,替换前记得先做个备份; 5、重启linux,终端运行vsim,ok。

    rsumdecourssurlamachineasynchronetd.zip_zip

    "serie_exe_mot_asynch.doc" 可能包含一系列有关异步电动机的练习或实验,帮助学习者理解电机运行的实际操作和问题解决。 "moteur_asynchrone_leger_3.doc" 可能是关于轻型(或小型)异步电动机的深入讲解,可能...

    asy:Asynch co,DeferredPromise light

    asy-异步等待库 不推荐使用。 使用aa。 var aa = require ( 'aa' ) ; aa ( function * ( ) { console . log ( 'start' ) ; yield aa .... console ....var thunkify = aa ....var read = thunkify ( fs ....fs ....aa

    asynch_mode_nginx

    通过Intel:registered:QuickAssist Technology(QAT)加速,NGINX *的Asynch模式可以显着提高性能。 发牌 该项目中文件的许可为: NGINX *的异步模式-BSD许可证。 请查看顶层文件夹中包含的LICENSE文件。 可以在...

    应用笔记LAT1215+如何配置STM32WB在没有LSE时运行BLE应用程序

    - 在“Application parameters”中设置RTC的异步预分频器(`CFG_RTC_ASYNCH_PRESCALER`)为127,同步预分频器(`CFG_RTC_SYNCH_PRESCALER`)为7812。这样的配置是为了适应HSE作为RTC时钟源的情况,并确保RTC时钟的...

    Stm32Rtc.zip_STM32 RTC 万年历_STM32 RTC使用_STM32RTC_rtc万年历_stm32万年历

    // 启用RTC及RTC_ASYNCH_PREDIV和RTC_SYNCH_PREDIV预分频器 RCC_RTCInitTypeDef RCC_RTCInitStruct; RCC_RTCInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSE; HAL_RTC_Init(&hrtc); ``` 设置和获取时间通常...

    STM32WB不使用LSE构建BLE(用HSE来代替LSE,用于没有低功耗要求的设计)

    调整CFG_RTC_ASYNCH_PRESCALER为127,CFG_RTC_SYNCH_PRESCALER为7812,以产生1Hz的内部时钟频率(ck_spre),保持与RTC同步,并为虚拟计时器提供相同的实时基准。 4. 修改时钟树配置,将RTC源复用器设置为"HSE_RTC...

    RTC_TIME.rar_stm32f103zet6

    RTC_InitStructure.RTC_ASYNCH_PREDIV = 0x7C; RTC_InitStructure.RTC_SYNCH_PREDIV = 0x5FF; RTC_Init(&RTC_InitStructure); ``` 4. 设置和读取RTC时间: RTC日期和时间的设置可以通过RTC_DateConfig和RTC_...

    STM32F103C8T6--时间(内部低速时钟).zip_STM32f103基于内部低速时钟的日期_f103c_f103c8t

    RTC_InitStructure.RTC_AsynchPrediv = RTC_ASYNCH_PREDIV; RTC_InitStructure.RTC_SynchPrediv = RTC_SYNCH_PREDIV; RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24; RTC_Init(&RTC_InitStructure); // 将...

Global site tag (gtag.js) - Google Analytics