tcp协议的套接字操作类
More...
#include <sttnet.h>
|
| void | setFD (const int &fd, SSL *ssl, const bool &flag1=false, const bool &flag2=false, const int &sec=-1) |
| | 传入套接字初始化对象
|
| |
| void | setTransportFunctions (std::function< int(std::string)> sendFunction, std::function< void()> closeFunction={}) |
| | 由服务端 Reactor 注入异步发送和关闭通道。
|
| |
| int | getFD () |
| | 获取该对象的套接字
|
| |
| SSL * | getSSL () |
| | 获取该对象的加密SSL句柄
|
| |
| void | close (const bool &cle=true) |
| | 关闭对象
|
| |
| void | blockSet (const int &sec=-1) |
| | 设置对象中的套接字为阻塞模式
|
| |
| void | unblockSet () |
| | 设置对象中的套接字为非阻塞模式
|
| |
| bool | multiUseSet () |
| | 设置对象中的套接字为SO_REUSEADDR模式
|
| |
| bool | isConnect () |
| | 判断对象是否有套接字绑定
|
| |
| int | sendData (const std::string &data, const bool &block=true) |
| | 向已连接的套接字发送字符串数据。
|
| |
| int | sendData (const char *data, const uint64_t &length, const bool &block=true) |
| | 向已连接的套接字发送指定长度的二进制数据。
|
| |
| int | recvDataByLength (std::string &data, const uint64_t &length, const int &sec=2) |
| | 从已连接的套接字中阻塞接收指定长度的数据到字符串
|
| |
| int | recvDataByLength (char *data, const uint64_t &length, const int &sec=2) |
| | 从已连接的套接字中阻塞接收指定长度的数据到char*容器
|
| |
| int | recvData (std::string &data, const uint64_t &length) |
| | 从已连接的套接字中接收一次数据到string字符串容器
|
| |
| int | recvData (char *data, const uint64_t &length) |
| | 从已连接的套接字中接收一次数据到char*容器
|
| |
|
| bool | flag3 =false |
| | 如果sendData的block=true,如果发送过程中连接断开,这个标志位会置为true
|
| |
◆ blockSet()
| void stt::network::TcpFDHandler::blockSet |
( |
const int & | sec = -1 | ) |
|
设置对象中的套接字为阻塞模式
- Parameters
-
| sec | 阻塞超时时间 阻塞超过这个时间就不会再阻塞了 默认为-1 即无限等待 |
◆ close()
| void stt::network::TcpFDHandler::close |
( |
const bool & | cle = true | ) |
|
关闭对象
- Parameters
-
| cle | true:关闭对象并且关闭原对象句柄的套接字的链接 false:仅关闭对象 (默认为ture,关闭对象也关闭连接) |
◆ getFD()
| int stt::network::TcpFDHandler::getFD |
( |
| ) |
|
|
inline |
获取该对象的套接字
- Returns
- 返回该对象的套接字
◆ getSSL()
| SSL * stt::network::TcpFDHandler::getSSL |
( |
| ) |
|
|
inline |
获取该对象的加密SSL句柄
- Returns
- 返回加密SSL句柄。如果没有加密SSL句柄,返回nullptr。
◆ isConnect()
| bool stt::network::TcpFDHandler::isConnect |
( |
| ) |
|
|
inline |
判断对象是否有套接字绑定
- Returns
- true:对象绑定了套接字 false:对象没有绑定套接字
◆ multiUseSet()
| bool stt::network::TcpFDHandler::multiUseSet |
( |
| ) |
|
◆ recvData() [1/2]
| int stt::network::TcpFDHandler::recvData |
( |
char * | data, |
|
|
const uint64_t & | length ) |
从已连接的套接字中接收一次数据到char*容器
- Parameters
-
| data | 接收数据的数据容器(char*类型) |
| length | 最大接收长度 |
- Returns
- 返回值 > 0:成功接收的字节数;
- 返回值 = 0:连接已关闭;
- 返回值 < 0:接收失败;
- -99:对象未绑定 socket;
- -100:非阻塞模式且没有数据
- Note
- 接收是否会阻塞根据fd的阻塞情况决定
◆ recvData() [2/2]
| int stt::network::TcpFDHandler::recvData |
( |
std::string & | data, |
|
|
const uint64_t & | length ) |
从已连接的套接字中接收一次数据到string字符串容器
- Parameters
-
| data | 接收数据的数据容器(string类型) |
| length | 最大接收长度 |
- Returns
- 返回值 > 0:成功接收的字节数;
- 返回值 = 0:连接已关闭;
- 返回值 < 0:接收失败;
- -99:对象未绑定 socket;
- -100:非阻塞模式且没有数据
- Note
- 接收是否会阻塞根据fd的阻塞情况决定
◆ recvDataByLength() [1/2]
| int stt::network::TcpFDHandler::recvDataByLength |
( |
char * | data, |
|
|
const uint64_t & | length, |
|
|
const int & | sec = 2 ) |
从已连接的套接字中阻塞接收指定长度的数据到char*容器
- Parameters
-
| data | 接收数据的数据容器(char*类型) |
| length | 接收长度 |
| sec | 等待时间 单位为秒 -1为无限阻塞等待 (默认为2s) |
- Returns
- 返回值 > 0:成功接收的字节数;
- 返回值 = 0:连接已关闭;
- 返回值 < 0:接收失败;
- -99:对象未绑定 socket;
- -100:超时
- Note
- 如果没有接收完指定的数据大小,一定阻塞到超时或者出错
◆ recvDataByLength() [2/2]
| int stt::network::TcpFDHandler::recvDataByLength |
( |
std::string & | data, |
|
|
const uint64_t & | length, |
|
|
const int & | sec = 2 ) |
从已连接的套接字中阻塞接收指定长度的数据到字符串
- Parameters
-
| data | 接收数据的数据容器(string类型) |
| length | 接收长度 |
| sec | 等待时间 单位为秒 -1为无限阻塞等待 (默认为2s) |
- Returns
- 返回值 > 0:成功接收的字节数;
- 返回值 = 0:连接已关闭;
- 返回值 < 0:接收失败;
- -99:对象未绑定 socket;
- -100:超时
- Note
- 如果没有接收完指定的数据大小,一定阻塞到超时或者出错
◆ sendData() [1/2]
| int stt::network::TcpFDHandler::sendData |
( |
const char * | data, |
|
|
const uint64_t & | length, |
|
|
const bool & | block = true ) |
向已连接的套接字发送指定长度的二进制数据。
- Parameters
-
| data | 指向要发送的数据缓冲区。 |
| length | 数据长度(字节)。 |
| block | 是否以阻塞模式发送(默认 true)。
- true:会阻塞直到全部数据发送成功除非出错了(无论 socket 是阻塞或非阻塞);如果需要判断是否连接断开了可以检查flag3标志位判断。
- false:阻塞与否取决于套接字状态。
|
- Returns
- 返回值 > 0:成功发送的字节数;
- 返回值 = 0:连接已关闭(block=false)或者发送成功的字节数为0(block=true);
- 返回值 < 0(只可能在block=false的情况下):发送失败;
- -99:对象未绑定 socket;
- -100:非阻塞模式下,发送缓冲区已满。
- -101:服务端异步发送队列已关闭或超过每连接高水位。
- Note
- 若 block 为 true,会持续阻塞直到全部数据发送完毕除非出错了(无论 socket 是阻塞或非阻塞),返回值一定>=0,适合希望确保完整发送的场景。如果需要判断是否连接断开了可以检查flag3标志位判断。 若 block 为 false,阻塞与否取决于套接字状态。返回值可能小于 length,需手动处理剩余数据。
-
当 handler 由 TcpServer 回调提供时,成功返回表示数据已被有界队列接受,并不表示已经写入内核或对端。
◆ sendData() [2/2]
| int stt::network::TcpFDHandler::sendData |
( |
const std::string & | data, |
|
|
const bool & | block = true ) |
向已连接的套接字发送字符串数据。
- Parameters
-
| data | 要发送的数据内容(std::string 类型)。 |
| block | 是否以阻塞模式发送(默认 true)。
- true:会阻塞直到全部数据发送成功除非出错了(无论 socket 是阻塞或非阻塞);如果需要判断是否连接断开了可以检查flag3标志位判断。
- false:阻塞与否取决于套接字状态。
|
- Returns
- 返回值 > 0:成功发送的字节数;
- 返回值 = 0:连接已关闭(block=false)或者发送成功的字节数为0(block=true);
- 返回值 < 0(只可能在block=false的情况下):发送失败;
- -99:对象未绑定 socket;
- -100:非阻塞模式下,发送缓冲区已满。
- -101:服务端异步发送队列已关闭或超过每连接高水位。
- Note
- 若 block 为 true,会持续阻塞直到全部数据发送完毕除非出错了(无论 socket 是阻塞或非阻塞),返回值一定>=0,适合希望确保完整发送的场景。如果需要判断是否连接断开了可以检查flag3标志位判断。 若 block 为 false,阻塞与否取决于套接字状态。返回值可能小于 希望发送的长度,需手动处理剩余数据。
-
当 handler 由 TcpServer 回调提供时,成功返回表示数据已被有界队列接受,并不表示已经写入内核或对端; block 参数在该模式下不会让 Worker 线程直接写 socket/SSL。
◆ setFD()
| void stt::network::TcpFDHandler::setFD |
( |
const int & | fd, |
|
|
SSL * | ssl, |
|
|
const bool & | flag1 = false, |
|
|
const bool & | flag2 = false, |
|
|
const int & | sec = -1 ) |
传入套接字初始化对象
- Note
- 可以选择设置套接字的阻塞和非阻塞,SO_REUSEADDR模式(只可能在服务端socket用到),还能选择该套接字加密后的SSL句柄
- Parameters
-
| fd | 套接字 |
| ssl | fd经过TLS加密后的SSL句柄(如果没有可以填nullptr) |
| flag1 | true:启用非阻塞模式 false:启用阻塞模式 (默认为false,即启用阻塞模式) |
| flag2 | true:启用SO_REUSEADDR模式 false:不启用SO_REUSEADDR模式 (默认为false,即不启用SO_REUSEADDR模式) |
| sec | 阻塞超时时间 阻塞超过这个时间就不会再阻塞了 默认为-1 即无限等待 |
◆ setTransportFunctions()
| void stt::network::TcpFDHandler::setTransportFunctions |
( |
std::function< int(std::string)> | sendFunction, |
|
|
std::function< void()> | closeFunction = {} ) |
|
inline |
由服务端 Reactor 注入异步发送和关闭通道。
- Parameters
-
| sendFunction | 接收完整数据并返回已接收入队字节数的函数。 |
| closeFunction | 请求 Reactor 关闭连接的函数。 |
- Note
- 主要供 TcpServer 及派生类构造回调 handler;普通客户端不需要调用。
-
注入后,sendData() 只把数据提交到有界发送队列,实际 socket/SSL 写入由 Reactor 完成。
◆ unblockSet()
| void stt::network::TcpFDHandler::unblockSet |
( |
| ) |
|
◆ fd
| int stt::network::TcpFDHandler::fd =-1 |
|
protected |
◆ flag1
| bool stt::network::TcpFDHandler::flag1 =false |
|
protected |
◆ flag2
| bool stt::network::TcpFDHandler::flag2 =false |
|
protected |
◆ flag3
| bool stt::network::TcpFDHandler::flag3 =false |
如果sendData的block=true,如果发送过程中连接断开,这个标志位会置为true
◆ queuedCloseFunction
| std::function<void()> stt::network::TcpFDHandler::queuedCloseFunction |
|
protected |
◆ queuedSendFunction
| std::function<int(std::string)> stt::network::TcpFDHandler::queuedSendFunction |
|
protected |
◆ sec
| int stt::network::TcpFDHandler::sec =-1 |
|
protected |
◆ ssl
| SSL* stt::network::TcpFDHandler::ssl =nullptr |
|
protected |
The documentation for this class was generated from the following file: