[libkcp] Part 1: 会话层

来源:互联网 发布:source tree mac 编辑:程序博客网 时间:2024/06/11 16:44

sess.h以及sess.cpp中实现的UDPSession类实现了会话层的概念。

这里核心的几个接口分别是

/* * 1. 创建一个到远端的UDP套接字连接 * 2. 分配一个UDPSession类的新实例, 并填写相关内容(比如刚刚创建的套接字) */static UDPSession *Dial(const char *ip, uint16_t port);
/* * Read: 提供给上层用户的读API * 1. 先看下一层的KCP中是否有待读取数据,如果没有,直接返回; * 2. 如果有,并且能够正好放入用户提供的缓冲区中,那么从KCP中取数据到用户缓冲区中; * 3. 如果用户缓冲区过小的话,UDPSession类实例中提供了一个缓冲区, *    就可以把多出来的数据放在该缓冲区,填满用户提供的缓冲区。 */ssize_t Read(char *buf, size_t sz) noexcept;/* * Write: 提供给上层用户的写API * 1. 直接交给KCP提供的接口ikcp_send() */ssize_t Write(const char *buf, size_t sz) noexcept;
/* * 不同于前面说的Read、Write,都是由用户所调用的。 * 回调函数out_wrapper,将注册至KCP,由KCP所调用来向网络发送数据。 * 在未开启FEC的情况下,out_wrapper等同于普通的UDP send()函数。 * 但是,在开启FEC的情况下,out_wrapper会先作相应的FEC操作,然后再send数据。 * 所以,这里提供了FEC层的抽象。 */static int out_wrapper(const char *buf, int len, struct IKCPCB *kcp, void *user);
原创粉丝点击