iocp 완성

This commit is contained in:
2025-05-02 12:05:57 +09:00
parent 14c325c428
commit 40d522e755
6 changed files with 24 additions and 18 deletions

View File

@@ -4,7 +4,8 @@ namespace Chattr {
class ServerManager {
public:
void init();
void
};
}

View File

@@ -14,7 +14,7 @@
#include "precomp.hpp"
void _TCPRecvClient(Chattr::ThreadPool* threadPool, Chattr::IOCPPASSINDATA* data);
void _IOCPClient(Chattr::ThreadPool* threadPool, Chattr::IOCPPASSINDATA* data);
void _TCPSendClient(Chattr::ThreadPool* threadPool, Chattr::TCPSocket sock, std::queue<Chattr::ResponsePacket> packets);
int main() {
@@ -22,13 +22,15 @@ int main() {
Chattr::log::setDefaultLogger(config.logLevel, config.logFileName, config.logfileSize, config.logfileCount);
Chattr::ThreadPool threadPool(0);
Chattr::IOCP iocp;
iocp.init(&threadPool, _TCPRecvClient);
iocp.init(&threadPool, _IOCPClient);
// struct Chattr::WSAManager wsaManager;
Chattr::TCPSocket sock;
struct Chattr::Address serveraddr;
Chattr::TCPSocket clientSock;
struct Chattr::Address clientAddr;
bool enable = true;
sock.setsockopt(SOL_SOCKET, SO_KEEPALIVE, (const char*)&enable, sizeof(enable));
if (config.ipVersion == 4) {
sock.init(AF_INET);
serveraddr.set(AF_INET, INADDR_ANY, config.listenPort);
@@ -54,6 +56,8 @@ int main() {
while (true) {
spdlog::info("Waiting for connection...");
sock.accept(clientSock, clientAddr);
bool enable = true;
clientSock.setsockopt(SOL_SOCKET, SO_KEEPALIVE, (const char *)&enable, sizeof(enable));
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
ZeroMemory(&ptr->overlapped, sizeof(OVERLAPPED));
ptr->socket = std::move(clientSock);
@@ -67,13 +71,7 @@ int main() {
}
}
void _TCPRecvClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDATA* data) {
#ifdef _WIN32
DWORD tid = GetCurrentThreadId();
#elif __linux__
pthread_t tid = pthread_self();
#endif
spdlog::info("entered recvfunc on TID: {}", tid);
void _IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDATA* data) {
Chattr::Packet pack;
int packetSize = 1500;
int totalRedSize = 0;
@@ -113,7 +111,7 @@ void _TCPRecvClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDATA* data) {
dataPostPacket.convToH();
dataPostPacket.__data.packetLength = (dataPostPacket.__data.packetLength > 1487) ? 1487 : dataPostPacket.__data.packetLength;
recvString = std::string((char *)dataPostPacket.__data.data, dataPostPacket.__data.packetLength - (sizeof(std::uint16_t)*4));
spdlog::info("Red size : {}, {} from : [{}]", totalRedSize, recvString, (std::string)data->socket.remoteAddr);
spdlog::info("Red size : {}, {} from : [{}]", data->wsabuf.len, recvString, (std::string)data->socket.remoteAddr);
break;
case Chattr::DataType::BINARY:
break;
@@ -168,14 +166,9 @@ void _TCPRecvClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDATA* data) {
packetError = true;
break;
}
DWORD recvbytes = 0, flags = 0;
Sleep(10000);
/*if (packetError) {
thread->enqueueJob(_TCPRecvClient, data);;
}
else
thread->enqueueJob(_TCPRecvClient, data);*/
int returnData = WSARecv(data->socket.sock, &data->wsabuf, 1, &recvbytes, &flags, &data->overlapped, NULL);
}
void _TCPSendClient(Chattr::ThreadPool* thread, Chattr::TCPSocket sock, std::queue<Chattr::ResponsePacket> packets) {