다중 접속시에 문제가 생김
This commit is contained in:
@@ -8,6 +8,8 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
|
||||
Chattr::Packet pack;
|
||||
int packetSize = data->transferredbytes;
|
||||
|
||||
memcpy(pack.serialized, data->wsabuf.buf, data->wsabuf.len);
|
||||
|
||||
if (data->event == IOCPEVENT::WRITE && data->transferredbytes >= data->wsabuf.len) {
|
||||
data->event = IOCPEVENT::READ;
|
||||
data->wsabuf.len = 1500;
|
||||
@@ -15,8 +17,6 @@ void ServerManager::_IOCPClient(Chattr::ThreadPool* thread, Chattr::IOCPPASSINDA
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(pack.serialized, data->wsabuf.buf, data->wsabuf.len);
|
||||
|
||||
std::uint16_t packetLength = ::ntohs(pack.__data.packetLength);
|
||||
|
||||
if (data->event == IOCPEVENT::READ && data->transferredbytes < packetLength + 8) {
|
||||
@@ -226,12 +226,11 @@ void ServerManager::processRoomListRequest(RoomListRequestPacket roomListRequest
|
||||
int packetLength = roomListResponsePacket.__data.packetLength;
|
||||
|
||||
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
|
||||
::memcpy(ptr, data, sizeof(IOCPPASSINDATA));
|
||||
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
|
||||
ptr->socket = data->socket;
|
||||
ptr->recvbytes = ptr->sendbytes = 0;
|
||||
ptr->wsabuf.buf = ptr->buf;
|
||||
ptr->wsabuf.len = packetLength + 8;
|
||||
ptr->IOCPInstance = data->IOCPInstance;
|
||||
|
||||
roomListResponsePacket.convToN();
|
||||
memcpy(ptr->wsabuf.buf, roomListResponsePacket.serialized, packetLength + 8);
|
||||
@@ -303,12 +302,11 @@ void ServerManager::processUsersListRequestPacket(UsersListRequestPacket usersLi
|
||||
int packetLength = usersListResponsePacket.__data.packetLength;
|
||||
|
||||
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
|
||||
::memcpy(ptr, data, sizeof(IOCPPASSINDATA));
|
||||
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
|
||||
ptr->socket = data->socket;
|
||||
ptr->recvbytes = ptr->sendbytes = 0;
|
||||
ptr->wsabuf.buf = ptr->buf;
|
||||
ptr->wsabuf.len = packetLength + 8;
|
||||
ptr->IOCPInstance = data->IOCPInstance;
|
||||
|
||||
usersListResponsePacket.convToN();
|
||||
memcpy(ptr->wsabuf.buf, usersListResponsePacket.serialized, packetLength + 8);
|
||||
@@ -351,12 +349,12 @@ void ServerManager::processDataPostPacket(DataPostPacket dataPostPacket, IOCPPAS
|
||||
|
||||
for (auto dest : destinationSockets) {
|
||||
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
|
||||
::memcpy(ptr, data, sizeof(IOCPPASSINDATA));
|
||||
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
|
||||
ptr->socket = dest;
|
||||
ptr->recvbytes = ptr->sendbytes = 0;
|
||||
ptr->wsabuf.buf = ptr->buf;
|
||||
ptr->wsabuf.len = packetLength + 6;
|
||||
ptr->IOCPInstance = data->IOCPInstance;
|
||||
|
||||
dataPostPacket.convToN();
|
||||
memcpy(ptr->wsabuf.buf, dataPostPacket.serialized, packetLength + 6);
|
||||
@@ -399,12 +397,12 @@ void ServerManager::processContinuePacket(ContinuePacket continuePacket, IOCPPAS
|
||||
|
||||
for (auto dest : destinationSockets) {
|
||||
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
|
||||
::memcpy(ptr, data, sizeof(IOCPPASSINDATA));
|
||||
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
|
||||
ptr->socket = dest;
|
||||
ptr->recvbytes = ptr->sendbytes = 0;
|
||||
ptr->wsabuf.buf = ptr->buf;
|
||||
ptr->wsabuf.len = packetLength + 6;
|
||||
ptr->IOCPInstance = data->IOCPInstance;
|
||||
|
||||
continuePacket.convToN();
|
||||
memcpy(ptr->wsabuf.buf, continuePacket.serialized, packetLength + 6);
|
||||
@@ -480,8 +478,6 @@ void ServerManager::run() {
|
||||
while (true) {
|
||||
spdlog::info("Waiting for connection...");
|
||||
listenSock_.accept(clientSock_, clientAddr_);
|
||||
bool enable = true;
|
||||
clientSock_.setsockopt(SOL_SOCKET, SO_KEEPALIVE, (const char*)&enable, sizeof(enable));
|
||||
Chattr::IOCPPASSINDATA* ptr = new Chattr::IOCPPASSINDATA;
|
||||
::memset(&ptr->overlapped, 0, sizeof(OVERLAPPED));
|
||||
ptr->socket = std::make_shared<TCPSocket>(std::move(clientSock_));
|
||||
|
||||
Reference in New Issue
Block a user