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

TCP Socket类 更多...

#include <tcp_socket.hpp>

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

Public 成员函数

 tcp_socket ()=default
 默认构造函数
 tcp_socket (native_handle_type fd)
 从原生句柄构造
 ~tcp_socket () override=default
 析构函数
void open (int family=AF_INET)
 打开TCP socket
bool connect (const ip_address &endpoint, milliseconds timeout, bool was_blocking=true)
 连接到远程服务器
virtual ssize_t send (memory_view< const char > data, int flags=0)
 发送数据
ssize_t send (memory_view< const char > data, milliseconds timeout, int flags=0)
 带超时的发送数据
void send_all (memory_view< const char > data)
 发送所有数据
virtual ssize_t receive (memory_view< char > buffer, int flags=0)
 接收数据
vector< char > receive_all (size_t expected_size)
 接收指定大小的所有数据
virtual NEFORCE_NODISCARD bool is_ssl () const noexcept
 检查是否为SSL/TLS socket
Public 成员函数 继承自 ip_socket
 ip_socket ()=default
 默认构造函数
 ip_socket (const native_handle_type fd) noexcept
 从原生句柄构造
 ~ip_socket () override=default
 析构函数
NEFORCE_NODISCARD int address_family () const noexcept
 获取地址族
NEFORCE_NODISCARD bool is_ipv4 () const noexcept
 检查是否为IPv4 socket
NEFORCE_NODISCARD bool is_ipv6 () const noexcept
 检查是否为IPv6 socket
virtual void connect (const ip_address &endpoint)
 连接到远程端点(TCP客户端)
bool close () noexcept override
 关闭socket
Public 成员函数 继承自 socket_base
 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
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 类型 继承自 socket_base
using native_handle_type
 平台原生句柄类型
静态 Public 属性 继承自 socket_base
static constexpr native_handle_type invalid_handle
 无效句柄常量
Protected 属性 继承自 ip_socket
int family_ = AF_UNSPEC
 地址族
Protected 属性 继承自 socket_base
native_handle_type fd_ = invalid_handle
 Socket句柄

详细描述

TCP Socket类

实现TCP协议的流式socket, TCP是面向连接的协议,提供可靠的数据传输、流量控制和拥塞控制。

主要功能:

  • TCP socket创建和打开
  • 连接建立(支持超时)
  • 数据发送(普通、带超时、全部发送)
  • 数据接收(普通、全部接收)
  • SSL/TLS支持接口

使用示例:

// TCP客户端示例
tcp_socket client;
client.open(AF_INET);
auto server = ip_address::parse("192.168.1.100", ports(8080));
if (client.connect(*server, milliseconds(3000))) {
string request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n";
client.send_all(request.view());
char buffer[4096];
ssize_t received = client.receive({buffer, sizeof(buffer)});
if (received > 0) {
println(string_view(buffer, received));
}
}
// TCP服务器示例
tcp_socket server;
server.open(AF_INET);
auto local = ip_address::any(ports(8080));
server.bind(local);
server.listen(128);
auto client_sock = server.accept(); // 接受连接
// 与客户端通信...
NEFORCE_NODISCARD NEFORCE_CONSTEXPR20 view_type view() const noexcept
获取字符串视图
static NEFORCE_NODISCARD ip_address any(ports port=ports::undef, int family=AF_INET) noexcept
获取通配地址
static NEFORCE_NODISCARD optional< ip_address > parse(const string &host, ports port=ports{}) noexcept
从字符串解析IP地址
void bind(const ip_address &endpoint)
绑定socket到本地地址
void listen(int backlog)
开始监听连接(TCP)
void send_all(memory_view< const char > data)
发送所有数据
void open(int family=AF_INET)
打开TCP socket
bool connect(const ip_address &endpoint, milliseconds timeout, bool was_blocking=true)
连接到远程服务器
tcp_socket()=default
默认构造函数
virtual ssize_t receive(memory_view< char > buffer, int flags=0)
接收数据
void println(Args &&... args)
打印多个值并换行
duration< int64_t, milli > milliseconds
毫秒持续时间
int64_t ssize_t
有符号大小类型
basic_string_view< char > string_view
字符字符串视图
网络端口封装类

在文件 tcp_socket.hpp70 行定义.

构造及析构函数说明

◆ tcp_socket()

tcp_socket::tcp_socket ( native_handle_type fd)
inlineexplicit

从原生句柄构造

参数
fd原生socket句柄

在文件 tcp_socket.hpp84 行定义.

引用了 ip_socket::ip_socket().

成员函数说明

◆ connect()

bool tcp_socket::connect ( const ip_address & endpoint,
milliseconds timeout,
bool was_blocking = true )

连接到远程服务器

参数
endpoint远程端点地址
timeout连接超时时间
was_blocking连接前是否处于阻塞模式
返回
连接成功返回true,超时返回false
异常
socket_exception连接失败时抛出
value_exceptionsocket未打开或端点无效时抛出

发起TCP连接到指定的远程服务器,支持超时控制。 非阻塞模式下,此函数会等待连接完成或超时。

◆ is_ssl()

virtual NEFORCE_NODISCARD bool tcp_socket::is_ssl ( ) const
inlinevirtualnoexcept

检查是否为SSL/TLS socket

返回
始终返回false(基类实现)

ssl_socket 重载.

在文件 tcp_socket.hpp178 行定义.

◆ open()

void tcp_socket::open ( int family = AF_INET)

打开TCP socket

参数
family地址族(AF_INET或AF_INET6),默认IPv4
异常
socket_exception创建失败时抛出

创建TCP协议的socket,使用SOCK_STREAM类型和IPPROTO_TCP协议。

◆ receive()

virtual ssize_t tcp_socket::receive ( memory_view< char > buffer,
int flags = 0 )
virtual

接收数据

参数
buffer接收缓冲区
flags接收标志(通常为0)
返回
实际接收的字节数(0表示连接关闭)
异常
socket_exception接收失败时抛出
value_exceptionsocket未打开时抛出

从已连接的远程端点接收数据。 返回0表示对端已关闭连接。

ssl_socket 重载.

◆ receive_all()

vector< char > tcp_socket::receive_all ( size_t expected_size)

接收指定大小的所有数据

参数
expected_size期望接收的字节数
返回
实际接收的数据(可能小于expected_size)
异常
socket_exception接收失败时抛出

循环接收直到达到期望大小或连接关闭。 适用于需要完整接收特定大小数据的场景。

◆ send() [1/2]

virtual ssize_t tcp_socket::send ( memory_view< const char > data,
int flags = 0 )
virtual

发送数据

参数
data要发送的数据
flags发送标志(通常为0)
返回
实际发送的字节数
异常
socket_exception发送失败时抛出
value_exceptionsocket未打开时抛出

发送数据到已连接的远程端点。 可能只发送部分数据,需要循环调用直到全部发送完成。

ssl_socket 重载.

引用了 data().

◆ send() [2/2]

ssize_t tcp_socket::send ( memory_view< const char > data,
milliseconds timeout,
int flags = 0 )

带超时的发送数据

参数
data要发送的数据
timeout发送超时时间
flags发送标志(通常为0)
返回
实际发送的字节数
异常
socket_exception发送失败或超时时抛出

在指定超时时间内等待socket可写,然后发送数据。

引用了 data().

◆ send_all()

void tcp_socket::send_all ( memory_view< const char > data)

发送所有数据

参数
data要发送的数据
异常
socket_exception发送失败时抛出

循环发送直到所有数据发送完毕。 适用于阻塞模式下的完整数据发送。

引用了 data().


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