#ifndef ACL_TCP_CTL_INCLUDE_H #define ACL_TCP_CTL_INCLUDE_H #ifdef __cplusplus extern "C" { #endif #include "../stdlib/acl_define.h" #define ACL_SOCKET_RBUF_SIZE 204800 /**< 缺省读缓冲区大小 */ #define ACL_SOCKET_WBUF_SIZE 204800 /**< 缺少写缓冲区大小 */ /** * 设置 TCP 套接字的读缓冲区大小 * @param fd {ACL_SOCKET} 套接字 * @param size {int} 缓冲区设置大小 */ ACL_API void acl_tcp_set_rcvbuf(ACL_SOCKET fd, int size); /** * 设置 TCP 套接字的写缓冲区大小 * @param fd {ACL_SOCKET} 套接字 * @param size {int} 缓冲区设置大小 */ ACL_API void acl_tcp_set_sndbuf(ACL_SOCKET fd, int size); /** * 获取 TCP 套接字的读缓冲区大小 * @param fd {ACL_SOCKET} 套接字 * @return {int} 缓冲区大小 */ ACL_API int acl_tcp_get_rcvbuf(ACL_SOCKET fd); /** * 获取 TCP 套接字的写缓冲区大小 * @param fd {ACL_SOCKET} 套接字 * @return {int} 缓冲区大小 */ ACL_API int acl_tcp_get_sndbuf(ACL_SOCKET fd); /** * 打开 TCP 套接字的 nodelay 功能 * @param fd {ACL_SOCKET} 套接字 */ ACL_API void acl_tcp_set_nodelay(ACL_SOCKET fd); /** * 设置 TCP 套接字的 nodelay 功能 * @param fd {ACL_SOCKET} 套接字 * @param onoff {int} 1 表示打开,0 表示关闭 */ ACL_API void acl_tcp_nodelay(ACL_SOCKET fd, int onoff); /** * 获得 TCP 套接字是否设置了 nodelay 选项 * @param fd {ACL_SOCKET} 套接字 * @return {int} 1 表示打开,0 表示关闭 */ ACL_API int acl_get_tcp_nodelay(ACL_SOCKET fd); /** * 设置 TCP 套接字的 SO_LINGER 选项 * @param fd {ACL_SOCKET} 套接字 * @param onoff {int} 是否启用 SO_LINGER 选项 * @param timeout {int} 当SO_LINGER打开时,取消 timed_wait 的时间,单位为秒 */ ACL_API void acl_tcp_so_linger(ACL_SOCKET fd, int onoff, int timeout); /** * 获得 TCP 套接字的 linger 值 * @param fd {ACL_SOCKET} 套接字 * @return {int} 返回 -1 表示未设置 linger 选项或内部出错,>= 0 表示设置了 * linger 选项且该值表示套接字关闭后该 TCP 连接在内核中维持 TIME_WAIT 状态 * 的逗留时间(秒) */ ACL_API int acl_get_tcp_solinger(ACL_SOCKET fd); /** * 设置监听套接字的延迟接收功能,即当客户端连接上有数据时才将该连接返回 * 给应用,目前该功能仅支持 Linux * @param fd {ACL_SOCKET} 套接字 * @param timeout {int} 如果客户端连接在规定的时间内未发来数据,也将该连接返回 * 给应用 */ ACL_API void acl_tcp_defer_accept(ACL_SOCKET fd, int timeout); /** * 设置监听套接字的快速建立 TCP 连接过程(需要内核支持) * @param fd {ACL_SOCKET} * @param on {int} 非 0 时打开此功能,否则关闭此功能 */ ACL_API void acl_tcp_fastopen(ACL_SOCKET fd, int on); #ifdef __cplusplus } #endif #endif