자잘한 수정, 이제 다른 소켓으로 쓰기 요청 할 수 있을 듯

This commit is contained in:
2025-05-03 13:59:04 +09:00
parent 181d30ff28
commit f765c163bf
12 changed files with 512 additions and 310 deletions

View File

@@ -7,7 +7,7 @@ namespace Chattr {
void IOCP::registerSocket(Chattr::IOCPPASSINDATA* data) {
#ifdef _WIN32
HANDLE returnData = ::CreateIoCompletionPort((HANDLE)data->socket.sock, completionPort_, data->socket.sock, 0);
HANDLE returnData = ::CreateIoCompletionPort((HANDLE)data->socket->sock, completionPort_, data->socket->sock, 0);
if (returnData == 0)
completionPort_ = returnData;
#elif __linux__
@@ -24,10 +24,10 @@ void IOCP::registerSocket(Chattr::IOCPPASSINDATA* data) {
#endif
}
int IOCP::recv(Chattr::IOCPPASSINDATA* data) {
int IOCP::recv(Chattr::IOCPPASSINDATA* data, int bufferCount) {
#ifdef _WIN32
DWORD recvbytes = 0, flags = 0;
return ::WSARecv(data->socket.sock, &data->wsabuf, 1, &recvbytes, &flags, &data->overlapped, NULL);
return ::WSARecv(data->socket->sock, &data->wsabuf, bufferCount, &recvbytes, &flags, &data->overlapped, NULL);
#elif __linux__
struct epoll_event ev;
ev.events = EPOLLIN | EPOLLONESHOT;
@@ -36,10 +36,10 @@ int IOCP::recv(Chattr::IOCPPASSINDATA* data) {
#endif
}
int IOCP::send(Chattr::IOCPPASSINDATA* data, int __flags) {
int IOCP::send(Chattr::IOCPPASSINDATA* data, int bufferCount, int __flags) {
#ifdef _WIN32
DWORD sendbytes = 0;
return ::WSASend(data->socket.sock, &data->wsabuf, 1, &sendbytes, __flags, &data->overlapped, NULL);
return ::WSASend(data->socket->sock, &data->wsabuf, bufferCount, &sendbytes, __flags, &data->overlapped, NULL);
#elif __linux__
struct epoll_event ev;
ev.events = EPOLLOUT | EPOLLONESHOT;

View File

@@ -80,12 +80,24 @@ int Socket::sendto(const void *__buf, size_t __n, int __flags, struct Address __
return retVal;
}
Socket::Socket(const Socket& other_) {
memcpy(this, &other_, sizeof(Socket));
valid_ = false;
}
Socket::Socket(Socket &&other_) noexcept {
other_.valid_ = false;
memcpy(this, &other_, sizeof(Socket));
valid_ = true;
}
Socket& Socket::operator=(const Socket& other_) {
memcpy(this, &other_, sizeof(Socket));
valid_ = false;
return *this;
}
Socket& Socket::operator=(Socket && other_) noexcept {
other_.valid_ = false;
memcpy(this, &other_, sizeof(Socket));