NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
socket_base类 参考

Socket基础类 更多...

#include <socket_base.hpp>

类 socket_base 继承关系图:
[图例]

Public 类型

using native_handle_type
 平台原生句柄类型

Public 成员函数

 socket_base ()
 默认构造函数
 socket_base (const native_handle_type fd) noexcept
 从原生句柄构造
 socket_base (socket_base &&other) noexcept
 移动构造函数
socket_baseoperator= (socket_base &&other) noexcept
 移动赋值运算符
virtual ~socket_base ()
 析构函数
NEFORCE_NODISCARD native_handle_type native_handle () const noexcept
 获取原生句柄
NEFORCE_NODISCARD bool is_open () const noexcept
 检查socket是否已打开
 operator bool () const noexcept
 布尔转换运算符
void open (int family, int type, int protocol)
 打开socket
virtual bool close () noexcept
 关闭socket
bool try_open (int family, int type, int protocol) noexcept
 尝试打开socket(不抛出异常)
bool set_nonblocking (bool enable) noexcept
 设置非阻塞模式
bool shutdown_send () noexcept
 关闭发送方向
bool shutdown_receive () noexcept
 关闭接收方向
bool shutdown_both () noexcept
 关闭双向通信
bool set_option (int level, int optname, const void *value, ::socklen_t len) noexcept
 设置socket选项
bool get_option (int level, int optname, void *optval, ::socklen_t *optlen) const noexcept
 获取socket选项
bool set_reuse_address (bool enable=true) noexcept
 设置地址重用(SO_REUSEADDR)
bool set_reuse_port (bool enable=true) noexcept
 设置端口重用(SO_REUSEPORT)
bool set_keep_alive (bool enable=true) noexcept
 设置TCP KeepAlive
bool set_tcp_nodelay (bool enable=true) noexcept
 设置TCP_NODELAY(禁用Nagle算法)
bool set_receive_buffer_size (int size) noexcept
 设置接收缓冲区大小
bool set_send_buffer_size (int size) noexcept
 设置发送缓冲区大小
bool set_send_timeout (milliseconds timeout) noexcept
 设置发送超时时间
bool set_receive_timeout (milliseconds timeout) noexcept
 设置接收超时时间
NEFORCE_NODISCARD optional< ip_addresslocal_endpoint () const
 获取本地端点地址
NEFORCE_NODISCARD optional< ip_addressremote_endpoint () const
 获取远程端点地址
void bind (const ip_address &endpoint)
 绑定socket到本地地址
void listen (int backlog)
 开始监听连接(TCP)
NEFORCE_NODISCARD native_handle_type release () noexcept
 释放socket所有权

静态 Public 属性

static constexpr native_handle_type invalid_handle
 无效句柄常量

Protected 属性

native_handle_type fd_ = invalid_handle
 Socket句柄

详细描述

Socket基础类

提供跨平台的socket基础操作,是所有socket类的基类。 支持移动语义,不支持拷贝。

主要功能:

  • Socket创建和关闭
  • 阻塞/非阻塞模式设置
  • Socket选项配置(地址重用、端口重用、TCP_NODELAY、KeepAlive等)
  • 收发缓冲区大小设置
  • 超时设置
  • 本地/远程端点查询
  • 绑定和监听
  • 移动语义支持

使用示例:

// 创建TCP socket
sock.open(AF_INET, SOCK_STREAM, 0);
// 设置选项
sock.set_reuse_address(true);
sock.set_tcp_nodelay(true);
sock.set_nonblocking(true);
// 绑定端口
auto addr = ip_address::any(ports(8080));
sock.bind(addr);
sock.listen(128);
// 获取本地地址
auto local = sock.local_endpoint();
if (local) {
println(local);
}
static NEFORCE_NODISCARD ip_address any(ports port=ports::undef, int family=AF_INET) noexcept
获取通配地址
bool set_tcp_nodelay(bool enable=true) noexcept
设置TCP_NODELAY(禁用Nagle算法)
bool set_reuse_address(bool enable=true) noexcept
设置地址重用(SO_REUSEADDR)
void bind(const ip_address &endpoint)
绑定socket到本地地址
NEFORCE_NODISCARD optional< ip_address > local_endpoint() const
获取本地端点地址
bool set_nonblocking(bool enable) noexcept
设置非阻塞模式
socket_base()
默认构造函数
void listen(int backlog)
开始监听连接(TCP)
void open(int family, int type, int protocol)
打开socket
void println(Args &&... args)
打印多个值并换行
网络端口封装类

在文件 socket_base.hpp101 行定义.

构造及析构函数说明

◆ socket_base() [1/2]

socket_base::socket_base ( const native_handle_type fd)
inlineexplicitnoexcept

从原生句柄构造

参数
fd原生socket句柄

在文件 socket_base.hpp133 行定义.

引用了 fd_.

◆ socket_base() [2/2]

socket_base::socket_base ( socket_base && other)
inlinenoexcept

移动构造函数

参数
other源对象

在文件 socket_base.hpp143 行定义.

引用了 fd_, invalid_handle , 以及 socket_base().

成员函数说明

◆ bind()

void socket_base::bind ( const ip_address & endpoint)

绑定socket到本地地址

参数
endpoint要绑定的IP地址和端口
异常
socket_exception绑定失败时抛出
value_exceptionsocket未打开或端点无效时抛出

引用了 bind().

被这些函数引用 bind().

◆ close()

virtual bool socket_base::close ( )
virtualnoexcept

关闭socket

返回
关闭成功返回true

ip_socket 重载.

被这些函数引用 ip_socket::close() , 以及 ~socket_base().

◆ get_option()

bool socket_base::get_option ( int level,
int optname,
void * optval,
::socklen_t * optlen ) const
noexcept

获取socket选项

参数
level协议层
optname选项名
optval输出缓冲区
optlen输入输出长度
返回
获取成功返回true

引用了 get_option().

被这些函数引用 get_option().

◆ is_open()

NEFORCE_NODISCARD bool socket_base::is_open ( ) const
inlinenoexcept

检查socket是否已打开

返回
已打开返回true

在文件 socket_base.hpp168 行定义.

引用了 fd_ , 以及 invalid_handle.

被这些函数引用 smtp_socket::is_connected() , 以及 operator bool().

◆ listen()

void socket_base::listen ( int backlog)

开始监听连接(TCP)

参数
backlog连接队列大小
异常
socket_exception监听失败时抛出
value_exceptionsocket未打开时抛出

引用了 listen().

被这些函数引用 listen().

◆ local_endpoint()

NEFORCE_NODISCARD optional< ip_address > socket_base::local_endpoint ( ) const

获取本地端点地址

返回
本地IP地址和端口,失败返回none

引用了 local_endpoint().

被这些函数引用 local_endpoint().

◆ native_handle()

NEFORCE_NODISCARD native_handle_type socket_base::native_handle ( ) const
inlinenoexcept

获取原生句柄

返回
原生socket句柄

在文件 socket_base.hpp162 行定义.

引用了 fd_.

◆ open()

void socket_base::open ( int family,
int type,
int protocol )

打开socket

参数
family地址族(AF_INET或AF_INET6)
typesocket类型(SOCK_STREAM、SOCK_DGRAM等)
protocol协议(0为自动选择)
异常
socket_exception创建失败时抛出
value_exception地址族无效时抛出

◆ operator bool()

socket_base::operator bool ( ) const
inlineexplicitnoexcept

布尔转换运算符

返回
已打开返回true

在文件 socket_base.hpp174 行定义.

引用了 is_open().

◆ operator=()

socket_base & socket_base::operator= ( socket_base && other)
noexcept

移动赋值运算符

参数
other源对象
返回
自身引用

引用了 socket_base().

◆ release()

NEFORCE_NODISCARD native_handle_type socket_base::release ( )
inlinenoexcept

释放socket所有权

返回
原生socket句柄

释放后当前对象不再管理该socket,调用者负责关闭。

在文件 socket_base.hpp336 行定义.

引用了 exchange(), fd_, invalid_handle , 以及 release().

被这些函数引用 release().

◆ remote_endpoint()

NEFORCE_NODISCARD optional< ip_address > socket_base::remote_endpoint ( ) const

获取远程端点地址

返回
远程IP地址和端口,失败返回none

引用了 remote_endpoint().

被这些函数引用 remote_endpoint().

◆ set_keep_alive()

bool socket_base::set_keep_alive ( bool enable = true)
noexcept

设置TCP KeepAlive

参数
enable是否启用
返回
设置成功返回true

引用了 set_keep_alive().

被这些函数引用 set_keep_alive().

◆ set_nonblocking()

bool socket_base::set_nonblocking ( bool enable)
noexcept

设置非阻塞模式

参数
enable是否启用
返回
设置成功返回true

引用了 set_nonblocking().

被这些函数引用 set_nonblocking().

◆ set_option()

bool socket_base::set_option ( int level,
int optname,
const void * value,
::socklen_t len )
noexcept

设置socket选项

参数
level协议层(SOL_SOCKET、IPPROTO_TCP等)
optname选项名
value选项值指针
len值长度
返回
设置成功返回true

引用了 set_option().

被这些函数引用 set_option().

◆ set_receive_buffer_size()

bool socket_base::set_receive_buffer_size ( int size)
noexcept

设置接收缓冲区大小

参数
size缓冲区大小(字节)
返回
设置成功返回true

引用了 set_receive_buffer_size() , 以及 size().

被这些函数引用 set_receive_buffer_size().

◆ set_receive_timeout()

bool socket_base::set_receive_timeout ( milliseconds timeout)
noexcept

设置接收超时时间

参数
timeout超时时间
返回
设置成功返回true

引用了 set_receive_timeout().

被这些函数引用 set_receive_timeout().

◆ set_reuse_address()

bool socket_base::set_reuse_address ( bool enable = true)
noexcept

设置地址重用(SO_REUSEADDR)

参数
enable是否启用
返回
设置成功返回true

引用了 set_reuse_address().

被这些函数引用 set_reuse_address().

◆ set_reuse_port()

bool socket_base::set_reuse_port ( bool enable = true)
noexcept

设置端口重用(SO_REUSEPORT)

参数
enable是否启用
返回
设置成功返回true(Linux支持,Windows不支持)

引用了 set_reuse_port().

被这些函数引用 set_reuse_port().

◆ set_send_buffer_size()

bool socket_base::set_send_buffer_size ( int size)
noexcept

设置发送缓冲区大小

参数
size缓冲区大小(字节)
返回
设置成功返回true

引用了 set_send_buffer_size() , 以及 size().

被这些函数引用 set_send_buffer_size().

◆ set_send_timeout()

bool socket_base::set_send_timeout ( milliseconds timeout)
noexcept

设置发送超时时间

参数
timeout超时时间
返回
设置成功返回true

引用了 set_send_timeout().

被这些函数引用 set_send_timeout().

◆ set_tcp_nodelay()

bool socket_base::set_tcp_nodelay ( bool enable = true)
noexcept

设置TCP_NODELAY(禁用Nagle算法)

参数
enable是否启用
返回
设置成功返回true

引用了 set_tcp_nodelay().

被这些函数引用 set_tcp_nodelay().

◆ shutdown_both()

bool socket_base::shutdown_both ( )
noexcept

关闭双向通信

返回
成功返回true

引用了 shutdown_both().

被这些函数引用 shutdown_both().

◆ shutdown_receive()

bool socket_base::shutdown_receive ( )
noexcept

关闭接收方向

返回
成功返回true

引用了 shutdown_receive().

被这些函数引用 shutdown_receive().

◆ shutdown_send()

bool socket_base::shutdown_send ( )
noexcept

关闭发送方向

返回
成功返回true

引用了 shutdown_send().

被这些函数引用 shutdown_send().

◆ try_open()

bool socket_base::try_open ( int family,
int type,
int protocol )
noexcept

尝试打开socket(不抛出异常)

参数
family地址族
typesocket类型
protocol协议
返回
打开成功返回true

引用了 try_open().

被这些函数引用 try_open().

类成员变量说明

◆ invalid_handle

native_handle_type socket_base::invalid_handle
staticconstexpr
初始值:
=
-1

无效句柄常量

无效句柄

在文件 socket_base.hpp113 行定义.

被这些函数引用 is_open(), release() , 以及 socket_base().


该类的文档由以下文件生成: