STTNet 0.7.0
Loading...
Searching...
No Matches
stt::network::TcpFDHandler Class Reference

tcp协议的套接字操作类 More...

#include <sttnet.h>

Inheritance diagram for stt::network::TcpFDHandler:
stt::network::HttpServerFDHandler stt::network::TcpClient stt::network::WebSocketServerFDHandler stt::network::HttpClient stt::network::WebSocketClient

Public Member Functions

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*容器
 

Public Attributes

bool flag3 =false
 如果sendData的block=true,如果发送过程中连接断开,这个标志位会置为true
 

Protected Attributes

int fd =-1
 
bool flag1 =false
 
bool flag2 =false
 
SSL * ssl =nullptr
 
int sec =-1
 
std::function< int(std::string)> queuedSendFunction
 
std::function< void()> queuedCloseFunction
 

Detailed Description

tcp协议的套接字操作类

Member Function Documentation

◆ blockSet()

void stt::network::TcpFDHandler::blockSet ( const int & sec = -1)

设置对象中的套接字为阻塞模式

Parameters
sec阻塞超时时间 阻塞超过这个时间就不会再阻塞了 默认为-1 即无限等待

◆ close()

void stt::network::TcpFDHandler::close ( const bool & cle = true)

关闭对象

Parameters
cletrue:关闭对象并且关闭原对象句柄的套接字的链接 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 ( )

设置对象中的套接字为SO_REUSEADDR模式

◆ 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套接字
sslfd经过TLS加密后的SSL句柄(如果没有可以填nullptr)
flag1true:启用非阻塞模式 false:启用阻塞模式 (默认为false,即启用阻塞模式)
flag2true:启用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 ( )

设置对象中的套接字为非阻塞模式

Member Data Documentation

◆ 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: