SCTP 库的简述和代码 (3)
--- 如转请保留作者信息 jundai2009@gmail.com 接这上回说, 上面, g_sctp_fsm 是状态列表入口, 不同的状态下,处理网络包的方法不一样, 就是说处理的API不一样, 那这API就在这里选择. 状态表格中, 左边fsm_handler_fn 是执行动作, 右边是下面将要进入的状态. 关于这个库的状态机设计, 还有下面两个比较重要的宏 #define SCTP_TRANSFER_STATE(assoc, new_state) do {\ if ((assoc)->cur_state != new_state) {\ sctp_enter_state(assoc, new_state);\ assoc->cur_state = new_state;\ }\ }while(0); #define SCTP_PROC_PKG(instance, assoc, pkg, parsed_info, new_assoc) do {\ sctp_state old_state, new_state; \ old_state = (assoc) ? (assoc->cur_state):SCTP_STATE_CLOSED;\ new_state = (g_sctp_fsm[old_state] + (pkg))->new_state;\ new_assoc =