Skip to content

Commit b73d16c

Browse files
committed
feat: add socket mode options and enhance logging with file descriptors
1 parent 4fc00f3 commit b73d16c

5 files changed

Lines changed: 24 additions & 27 deletions

File tree

docs/cppnet/ssl/ssl_context.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,10 @@
3939
- 参数:无
4040
- 返回值:指向 `SSLSocket` 的智能指针。
4141
- 作用:创建一个新的 SSL 套接字。
42-
## std::shared_ptr\<SSLSocket\> AcceptSSL(const Socket &soc)
42+
## std::shared_ptr\<SSLSocket\> AcceptSSL(const Socket &soc,SSLSocket::Mode soc_mode = SSLSocket::Mode::kQuickly)
4343
- 参数:
4444
- `soc`:普通套接字对象。
45+
- `soc_mode`: ssl soc 类型。
4546
- 返回值:指向 `SSLSocket` 的智能指针。
4647
- 作用:接受一个连接并创建一个 SSL 套接字。
4748
## int Close()

docs/cppnet/ssl/ssl_socket.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# cppnet::SSLSocket
2-
## SSLSocket(SSL \*ssl, const Socket &soc)
2+
## SSLSocket(SSL \*ssl, const Socket &soc, Mode mode = Mode::kQuickly)
33
- 参数:
44
- `ssl`:OpenSSL 的 SSL 指针。
55
- `soc`:普通套接字对象。
6+
- `mode`: socket 模式
7+
- kQuickly: 快捷模式, 默认此模式, 多线程并发操作同一个 soc 可能段错误。
8+
- kSafely: 安全模式, 此时对这个 socket 的操作都会加锁, 并发安全。
69
- 返回值:无
710
- 作用:构造一个 SSLSocket 对象,关联给定的 SSL 指针和套接字。
811
## int Connect(Address &addr) override

src/cppnet/http/server/http_server.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
#include "../../utils/const.hpp"
33
#include "../../utils/file.hpp"
44
#include "filter/http_method_filter.hpp"
5-
#include "utils/date.hpp"
65
#include <functional>
76
#include <memory>
87
#include <string>
@@ -251,7 +250,8 @@ void HttpServer::HandleAccept(TcpServer &server, Socket &event_soc) {
251250
Address recv_addr;
252251
auto rc = event_soc.GetAddr(recv_addr);
253252
if (rc != RC::kSuccess) {
254-
logger_->Error("[event_soc.GetAddr]:" + event_soc.err_msg());
253+
logger_->Error("[event_soc.GetAddr]:" + event_soc.err_msg() +
254+
" soc:" + std::to_string(event_soc.fd()));
255255
server.RemoveSoc(event_soc);
256256
event_soc.Close();
257257
return;
@@ -270,7 +270,8 @@ void HttpServer::HandleAccept(TcpServer &server, Socket &event_soc) {
270270
if (ssl_context_) {
271271
auto ssl_socket = ssl_context_->AcceptSSL(event_soc);
272272
if (ssl_socket == nullptr) {
273-
logger_->Error("[ssl_context.AcceptSSL]:" + ssl_context_->err_msg());
273+
logger_->Error("[ssl_context.AcceptSSL]:" + ssl_context_->err_msg() +
274+
" soc:" + std::to_string(event_soc.fd()));
274275
server.RemoveSoc(event_soc);
275276
event_soc.Close();
276277
return;
@@ -298,8 +299,6 @@ void HttpServer::HandleRead(TcpServer &server, Socket &event_soc) {
298299
const std::string kCRLF = "\r\n";
299300
const std::string kEndl = "\n";
300301
std::shared_ptr<Socket> soc = nullptr;
301-
Address recv_addr;
302-
event_soc.GetAddr(recv_addr);
303302

304303
#ifdef CPPNET_OPENSSL
305304
if (ssl_context_) {
@@ -322,17 +321,19 @@ void HttpServer::HandleRead(TcpServer &server, Socket &event_soc) {
322321
std::string buf;
323322
auto len = soc->ReadUntil(buf, kCRLF + kCRLF);
324323
if (len == 0) {
325-
logger_->Error("[soc.ReadUntil]: peer close before read complete");
324+
logger_->Error("[soc.ReadUntil]: peer close before read complete ,soc:" +
325+
std::to_string(soc->fd()));
326326
server.RemoveSoc(event_soc);
327327
soc->Close();
328328
return;
329329
}
330330
if (len < 0) {
331331
if (soc->err_no() == EAGAIN || soc->err_no() == EWOULDBLOCK) {
332-
logger_->Error("[soc.ReadUntil]: read timeout");
332+
logger_->Error("[soc.ReadUntil]: read timeout ,soc:" +
333+
std::to_string(soc->fd()));
333334
} else {
334335
logger_->Error("[soc.ReadUntil]:" + soc->err_msg() +
335-
" soc:" + std::to_string(event_soc.fd()));
336+
" soc:" + std::to_string(soc->fd()));
336337
}
337338
server.RemoveSoc(event_soc);
338339
soc->Close();
@@ -427,9 +428,9 @@ void HttpServer::HandleRead(TcpServer &server, Socket &event_soc) {
427428
}
428429

429430
// standardized log format
430-
logger_->Info("[cppnet] " + Date::GetNow() + " | " +
431-
std::to_string(int(resp.status_code())) + " | " +
432-
recv_addr.ToString() + " | " +
431+
logger_->Info("[cppnet] | " + std::to_string(int(resp.status_code())) +
432+
" | " + soc->GetAddr().ToString() + " " +
433+
std::to_string(soc->fd()) + " | " +
433434
HttpMethodUtil::ConvertToStr(method) + " | " + path);
434435
logger_->Debug(
435436
"resp: " + HttpStatusCodeUtil::ConvertToStr(resp.status_code()) +

src/cppnet/log/file_logger.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "file_logger.hpp"
22
#include "../utils/const.hpp"
33
#include "../utils/file.hpp"
4+
#include "utils/date.hpp"
45

56
namespace cppnet {
67

@@ -59,39 +60,39 @@ void FileLogger::Debug(const std::string &msg) {
5960
if (level_ > Logger::Level::kDebug || cur_buffer_ == nullptr) {
6061
return;
6162
}
62-
cur_buffer_->data += "[DEBUG]" + GetNowTime() + "|" + msg + "\n";
63+
cur_buffer_->data += "[DEBUG]" + Date::GetNow() + "|" + msg + "\n";
6364
CheckFlush();
6465
}
6566

6667
void FileLogger::Info(const std::string &msg) {
6768
if (level_ > Logger::Level::kInfo || cur_buffer_ == nullptr) {
6869
return;
6970
}
70-
cur_buffer_->data += "[INFO]" + GetNowTime() + "|" + msg + "\n";
71+
cur_buffer_->data += "[INFO]" + Date::GetNow() + "|" + msg + "\n";
7172
CheckFlush();
7273
}
7374

7475
void FileLogger::Warn(const std::string &msg) {
7576
if (level_ > Logger::Level::kWarn || cur_buffer_ == nullptr) {
7677
return;
7778
}
78-
cur_buffer_->data += "[WARN]" + GetNowTime() + "|" + msg + "\n";
79+
cur_buffer_->data += "[WARN]" + Date::GetNow() + "|" + msg + "\n";
7980
CheckFlush();
8081
}
8182

8283
void FileLogger::Error(const std::string &msg) {
8384
if (level_ > Logger::Level::kError || cur_buffer_ == nullptr) {
8485
return;
8586
}
86-
cur_buffer_->data += "[ERROR]" + GetNowTime() + "|" + msg + "\n";
87+
cur_buffer_->data += "[ERROR]" + Date::GetNow() + "|" + msg + "\n";
8788
CheckFlush();
8889
}
8990

9091
void FileLogger::Fatal(const std::string &msg) {
9192
if (level_ > Logger::Level::kFatal || cur_buffer_ == nullptr) {
9293
return;
9394
}
94-
cur_buffer_->data += "[FATAL]" + GetNowTime() + "|" + msg + "\n";
95+
cur_buffer_->data += "[FATAL]|" + msg + "\n";
9596
CheckFlush();
9697
}
9798

@@ -135,12 +136,4 @@ void FileLogger::FlushBuffer(std::string file_path,
135136
buffer->last_flush_time = time(nullptr);
136137
}
137138

138-
std::string FileLogger::GetNowTime() {
139-
static char buf[64];
140-
time_t now = time(nullptr);
141-
struct tm *tm_now = localtime(&now);
142-
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", tm_now);
143-
return std::string(buf);
144-
}
145-
146139
} // namespace cppnet

src/cppnet/log/file_logger.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ class FileLogger : public Logger {
6161
static void FlushBuffer(std::string file_path,
6262
std::shared_ptr<Buffer> buffer);
6363
void CheckFlush();
64-
std::string GetNowTime();
6564

6665
private:
6766
std::string file_path_;

0 commit comments

Comments
 (0)