자잘한 버그 해결

This commit is contained in:
2025-04-23 01:21:36 +09:00
parent 89cac9c54f
commit cebf59ddd8
6 changed files with 59 additions and 48 deletions

View File

@@ -1,5 +1,5 @@
{ {
"IP Version" : 6, "IP Version" : 4,
"Listen Port" : 9010, "Listen Port" : 9010,
"LogLevel" : 1, "LogLevel" : 1,
"LogfileCount" : 5, "LogfileCount" : 5,

View File

@@ -32,6 +32,12 @@ int main() {
sock.listen(SOMAXCONN); sock.listen(SOMAXCONN);
struct Chattr::TCPSocket clientSock; struct Chattr::TCPSocket clientSock;
struct Chattr::Address clientAddr; struct Chattr::Address clientAddr;
if (config.ipVersion == 4)
clientAddr.length = sizeof(sockaddr_in);
else
clientAddr.length = sizeof(sockaddr_in6);
spdlog::info("Waiting for connection..."); spdlog::info("Waiting for connection...");
sock.accept(clientSock, clientAddr); sock.accept(clientSock, clientAddr);
} }

View File

@@ -24,20 +24,20 @@ void setDefaultLogger(spdlog::level::level_enum logLevel, gsl::czstring logFileN
void critical(gsl::czstring msg) { void critical(gsl::czstring msg) {
#ifdef _WIN32 #ifdef _WIN32
gsl::zstring msgbuf = nullptr; LPSTR msgbuf = nullptr;
FormatMessageA( FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, NULL,
WSAGetLastError(), WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf, (LPSTR)&msgbuf,
0, 0,
NULL); NULL);
spdlog::critical("[{}] {}", msg, msgbuf); spdlog::critical("[{}] {}", msg, msgbuf);
LocalFree(msgbuf); LocalFree(msgbuf);
#elif __linux__ #elif __linux__
gsl::czstring msgbuf = strerror(errno); gsl::czstring msgbuf = strerror(errno);
spdlog::critical("[{}] {}", msg, msgbuf); spdlog::critical("[{}] {}", msg, msgbuf);
#else #else
#error "이 플랫폼은 지원되지 않습니다." #error "이 플랫폼은 지원되지 않습니다."
#endif #endif
@@ -46,20 +46,20 @@ void critical(gsl::czstring msg) {
void error(gsl::czstring msg) { void error(gsl::czstring msg) {
#ifdef _WIN32 #ifdef _WIN32
gsl::zstring msgbuf = nullptr; LPSTR msgbuf = nullptr;
FormatMessageA( FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL, NULL,
WSAGetLastError(), WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf, (LPSTR)&msgbuf,
0, 0,
NULL); NULL);
spdlog::critical("[{}] {}", msg, msgbuf); spdlog::critical("[{}] {}", msg, msgbuf);
LocalFree(msgbuf); LocalFree(msgbuf);
#elif __linux__ #elif __linux__
gsl::czstring msgbuf = strerror(errno); gsl::czstring msgbuf = strerror(errno);
spdlog::critical("[{}] {}", msg, msgbuf); spdlog::critical("[{}] {}", msg, msgbuf);
#else #else
#error "이 플랫폼은 지원되지 않습니다." #error "이 플랫폼은 지원되지 않습니다."
#endif #endif

View File

@@ -4,6 +4,14 @@
namespace Chattr { namespace Chattr {
Socket::Socket() {
#ifdef _WIN32
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
log::critical("WSAStartup()");
#endif
}
Socket::Socket(int domain, int type, int protocol) { Socket::Socket(int domain, int type, int protocol) {
#ifdef _WIN32 #ifdef _WIN32
WSADATA wsa; WSADATA wsa;
@@ -68,11 +76,11 @@ void Socket::move(const SOCKET __sock) {
valid_ = true; valid_ = true;
}; };
void Socket::bind(const sockaddr *__addr) { void Socket::bind(sockaddr *__addr) {
bind((struct sockaddr *)__addr, sizeof(*__addr)); bind((struct sockaddr *)__addr, sizeof(sockaddr));
} }
void Socket::bind(const sockaddr *__addr, socklen_t __len) { void Socket::bind(sockaddr *__addr, socklen_t __len) {
bindAddr.length = __len; bindAddr.length = __len;
std::memcpy(&bindAddr, __addr, __len); std::memcpy(&bindAddr, __addr, __len);
int retVal = ::bind(sock_, __addr, __len); int retVal = ::bind(sock_, __addr, __len);
@@ -80,19 +88,19 @@ void Socket::bind(const sockaddr *__addr, socklen_t __len) {
log::critical("bind()"); log::critical("bind()");
} }
void Socket::bind(const sockaddr_in *__addr) { void Socket::bind(sockaddr_in *__addr) {
bind((struct sockaddr *)__addr, sizeof(*__addr)); bind((struct sockaddr *)__addr, sizeof(sockaddr_in));
} }
void Socket::bind(const sockaddr_in *__addr, socklen_t __len) { void Socket::bind(sockaddr_in *__addr, socklen_t __len) {
bind((struct sockaddr *)__addr, __len); bind((struct sockaddr *)__addr, __len);
} }
void Socket::bind(const sockaddr_in6 *__addr) { void Socket::bind(sockaddr_in6 *__addr) {
bind((struct sockaddr *)__addr, sizeof(*__addr)); bind((struct sockaddr *)__addr, sizeof(sockaddr_in6));
} }
void Socket::bind(const sockaddr_in6 *__addr, socklen_t __len) { void Socket::bind(sockaddr_in6 *__addr, socklen_t __len) {
bind((struct sockaddr *)__addr, __len); bind((struct sockaddr *)__addr, __len);
} }

View File

@@ -5,10 +5,7 @@
namespace Chattr { namespace Chattr {
void TCPSocket::init(int domain) { void TCPSocket::init(int domain) {
sock_ = ::socket(domain, SOCK_STREAM, 0); init(domain, SOCK_STREAM, 0);
if (sock_ == INVALID_SOCKET)
log::critical("socket()");
valid_ = true; valid_ = true;
} }

View File

@@ -6,7 +6,7 @@ namespace Chattr {
class Socket { class Socket {
public: public:
Socket() {} Socket();
Socket(int domain, int type, int protocol); Socket(int domain, int type, int protocol);
~Socket(); ~Socket();
@@ -15,21 +15,21 @@ public:
operator SOCKET() const; operator SOCKET() const;
void move(const SOCKET); void move(const SOCKET);
void bind(const sockaddr *__addr); void bind(sockaddr *__addr);
void bind(const sockaddr *__addr, socklen_t __len); void bind(sockaddr *__addr, socklen_t __len);
//IPV4 //IPV4
void bind(const sockaddr_in *__addr); void bind(sockaddr_in *__addr);
void bind(const sockaddr_in *__addr, socklen_t __len); void bind(sockaddr_in *__addr, socklen_t __len);
//IPV6 //IPV6
void bind(const sockaddr_in6 *__addr); void bind(sockaddr_in6 *__addr);
void bind(const sockaddr_in6 *__addr, socklen_t __len); void bind(sockaddr_in6 *__addr, socklen_t __len);
Socket(const Socket&) = delete; Socket(const Socket&) = delete;
Socket& operator=(const Socket&) = delete; Socket& operator=(const Socket&) = delete;
struct Address bindAddr; struct Address bindAddr = {};
protected: protected:
bool valid_ = false; bool valid_ = false;
SOCKET sock_ = INVALID_SOCKET; SOCKET sock_ = INVALID_SOCKET;