代码拉取完成,页面将自动刷新
#pragma once
#ifdef _WIN32
#include <ws2tcpip.h>
#else
#include<sys/socket.h>
#define SOCKET int
#endif
#include<list>
#include<openssl/ssl.h>
class SSLClient{
static const unsigned int CACHESIZE=8192;
public:
//返回false则这轮保留并重置状态 会阻塞后续数据
typedef bool(*DataCallback)(SSLClient*,void*);
typedef void(*TimeoutCallback)(SSLClient*,void*);
typedef struct{
char* src;
size_t size;
DataCallback callback;
void* arg;
}DataPack;
public:
virtual ~SSLClient();
//和服务端一起使用时无需调用
static bool openlib();
//和服务端一起使用时无需调用
static void closelib();
//线程不安全 多线程访问需要另外加锁 超时时会移除所有任务
SSLClient(DataPack defaultpack,TimeoutCallback timeout,void* timeoutarg,
time_t maxtime=120);
//非阻塞通信 返回0初始化正常(不代表网络连接正常) -1出错
int connecthost(const char* address,unsigned int port);
//更新数据收发以及回调(如果数据发完收完)
void update();
static bool emptysendback(SSLClient*,void*);
void senddata(DataPack p);
//将数据接收加入队列
void recvdata(DataPack p);
//返回当前任务已经发送的数据量
size_t getsent();
//返回当前任务已经接收的数据量
size_t getrecv();
private:
bool verified;
time_t recordtime,maxtime;
unsigned int sendcount,recvcount;
size_t sendpos,recvpos;
SOCKET _socket;
SSL_CTX* ctx;
SSL* ssl;
void* timeoutarg;
TimeoutCallback timeout;
char cache[CACHESIZE];
size_t pos,size;
std::list<DataPack> pendingsend;//待发送包
std::list<DataPack> pendingrecv;//待接收包
DataPack defaultpack;
//返回-1表示出错
size_t getdata(char* buffer,size_t length);
};
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。