diff --git a/Server/src/config.json b/Server/src/config.json index 5d7237d..9b55171 100644 --- a/Server/src/config.json +++ b/Server/src/config.json @@ -1,5 +1,5 @@ { - "IP Version" : 6, + "IP Version" : 4, "Listen Port" : 9010, "LogLevel" : 1, "LogfileCount" : 5, diff --git a/Server/src/server.cpp b/Server/src/server.cpp index b430caf..a73251e 100644 --- a/Server/src/server.cpp +++ b/Server/src/server.cpp @@ -32,6 +32,12 @@ int main() { sock.listen(SOMAXCONN); struct Chattr::TCPSocket clientSock; struct Chattr::Address clientAddr; + + if (config.ipVersion == 4) + clientAddr.length = sizeof(sockaddr_in); + else + clientAddr.length = sizeof(sockaddr_in6); + spdlog::info("Waiting for connection..."); sock.accept(clientSock, clientAddr); } \ No newline at end of file diff --git a/impl/Socket/Log.cpp b/impl/Socket/Log.cpp index a2b53ad..8b5f510 100644 --- a/impl/Socket/Log.cpp +++ b/impl/Socket/Log.cpp @@ -24,20 +24,20 @@ void setDefaultLogger(spdlog::level::level_enum logLevel, gsl::czstring logFileN void critical(gsl::czstring msg) { #ifdef _WIN32 - gsl::zstring msgbuf = nullptr; - FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - WSAGetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - msgbuf, - 0, - NULL); - spdlog::critical("[{}] {}", msg, msgbuf); - LocalFree(msgbuf); + LPSTR msgbuf = nullptr; + FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + WSAGetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&msgbuf, + 0, + NULL); + spdlog::critical("[{}] {}", msg, msgbuf); + LocalFree(msgbuf); #elif __linux__ - gsl::czstring msgbuf = strerror(errno); - spdlog::critical("[{}] {}", msg, msgbuf); + gsl::czstring msgbuf = strerror(errno); + spdlog::critical("[{}] {}", msg, msgbuf); #else #error "이 플랫폼은 지원되지 않습니다." #endif @@ -46,20 +46,20 @@ void critical(gsl::czstring msg) { void error(gsl::czstring msg) { #ifdef _WIN32 - gsl::zstring msgbuf = nullptr; - FormatMessageA( - FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, - NULL, - WSAGetLastError(), - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - msgbuf, - 0, - NULL); - spdlog::critical("[{}] {}", msg, msgbuf); - LocalFree(msgbuf); + LPSTR msgbuf = nullptr; + FormatMessageA( + FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + WSAGetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPSTR)&msgbuf, + 0, + NULL); + spdlog::critical("[{}] {}", msg, msgbuf); + LocalFree(msgbuf); #elif __linux__ - gsl::czstring msgbuf = strerror(errno); - spdlog::critical("[{}] {}", msg, msgbuf); + gsl::czstring msgbuf = strerror(errno); + spdlog::critical("[{}] {}", msg, msgbuf); #else #error "이 플랫폼은 지원되지 않습니다." #endif diff --git a/impl/Socket/Socket.cpp b/impl/Socket/Socket.cpp index 2a705b5..e199e42 100644 --- a/impl/Socket/Socket.cpp +++ b/impl/Socket/Socket.cpp @@ -4,6 +4,14 @@ 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) { #ifdef _WIN32 WSADATA wsa; @@ -68,11 +76,11 @@ void Socket::move(const SOCKET __sock) { valid_ = true; }; -void Socket::bind(const sockaddr *__addr) { - bind((struct sockaddr *)__addr, sizeof(*__addr)); +void Socket::bind(sockaddr *__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; std::memcpy(&bindAddr, __addr, __len); int retVal = ::bind(sock_, __addr, __len); @@ -80,19 +88,19 @@ void Socket::bind(const sockaddr *__addr, socklen_t __len) { log::critical("bind()"); } -void Socket::bind(const sockaddr_in *__addr) { - bind((struct sockaddr *)__addr, sizeof(*__addr)); +void Socket::bind(sockaddr_in *__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); } -void Socket::bind(const sockaddr_in6 *__addr) { - bind((struct sockaddr *)__addr, sizeof(*__addr)); +void Socket::bind(sockaddr_in6 *__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); } diff --git a/impl/Socket/TCPSocket.cpp b/impl/Socket/TCPSocket.cpp index 6789a28..8721a8c 100644 --- a/impl/Socket/TCPSocket.cpp +++ b/impl/Socket/TCPSocket.cpp @@ -5,10 +5,7 @@ namespace Chattr { void TCPSocket::init(int domain) { - sock_ = ::socket(domain, SOCK_STREAM, 0); - if (sock_ == INVALID_SOCKET) - log::critical("socket()"); - + init(domain, SOCK_STREAM, 0); valid_ = true; } diff --git a/include/Socket/Socket.hpp b/include/Socket/Socket.hpp index 34f70fc..4bb5370 100644 --- a/include/Socket/Socket.hpp +++ b/include/Socket/Socket.hpp @@ -6,7 +6,7 @@ namespace Chattr { class Socket { public: - Socket() {} + Socket(); Socket(int domain, int type, int protocol); ~Socket(); @@ -15,21 +15,21 @@ public: operator SOCKET() const; void move(const SOCKET); - void bind(const sockaddr *__addr); - void bind(const sockaddr *__addr, socklen_t __len); + void bind(sockaddr *__addr); + void bind(sockaddr *__addr, socklen_t __len); //IPV4 - void bind(const sockaddr_in *__addr); - void bind(const sockaddr_in *__addr, socklen_t __len); + void bind(sockaddr_in *__addr); + void bind(sockaddr_in *__addr, socklen_t __len); //IPV6 - void bind(const sockaddr_in6 *__addr); - void bind(const sockaddr_in6 *__addr, socklen_t __len); + void bind(sockaddr_in6 *__addr); + void bind(sockaddr_in6 *__addr, socklen_t __len); Socket(const Socket&) = delete; Socket& operator=(const Socket&) = delete; - struct Address bindAddr; + struct Address bindAddr = {}; protected: bool valid_ = false; SOCKET sock_ = INVALID_SOCKET;