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