Linux下SCTP通信的示例程序

1. 关于Notification

1.1. 首先开启server端里面全部的notification

    evnts.sctp_data_io_event = 1;
    evnts.sctp_association_event = 1;
    
#ifdef ENABLE_ALL_NOTIFICATION
    evnts.sctp_address_event = 1;
    evnts.sctp_send_failure_event = 1;
    evnts.sctp_peer_error_event = 1;
    evnts.sctp_shutdown_event = 1;
    evnts.sctp_partial_delivery_event = 1;
    evnts.sctp_adaptation_layer_event = 1;
    evnts.sctp_sender_dry_event = 1;
#endif

1.2. 初始建立(client端发起第一条消息)

1.2.1 Server端收到的消息

之后从client端发送第一条消息给server端,通过打印查看server端收到的消息,以及notification。

  1. 第一条收到的是association建立起来的Notification


    COMMUNICATION UP
  2. 第二条才是client端发送的数据


    Data trunk
  3. 第三条收到一条notification通知说没有数据可以发送了


    SENDER_DRY
  4. 最后会收到一系列的Address change的notification


    Linux下SCTP通信的示例程序_第1张图片
    PEER_ADDRESS_CHANGE

    是不是因为multi-home的原因,多个地址都可以使用了

1.2.2 Client端收到的消息

  1. Client发出消息后,第一条收到的是一个notification通知communication up


  2. 接着收到一个nitification通知没有数据了


  3. 最后收到server端回传的消息

1.3. 如果Client意外中断退出程序

Server会收到一个notification通知association shutdown


1.4. 如果Server意外中断退出程序

先前association已经建立好了。server突然中断退出。
这个时候client不会收到任何通知,如果client继续往client发送消息

  1. 收到SCTP shutdown事件


  2. 收到association shutdown事件


  3. 收到can not start association事件


  4. 收到SCTP发送失败事件


1.5. 如果server根本没有启动,然后client尝试发起请求

image.png

你可能感兴趣的:(Linux下SCTP通信的示例程序)