다중 접속시에 문제가 생김
This commit is contained in:
@@ -20,6 +20,7 @@ void IOCP::destruct() {
|
||||
}
|
||||
|
||||
void IOCP::registerSocket(IOCPPASSINDATA* data) {
|
||||
data->event = IOCPEVENT::READ;
|
||||
#ifdef _WIN32
|
||||
HANDLE returnData = ::CreateIoCompletionPort((HANDLE)data->socket->sock, completionPort_, data->socket->sock, 0);
|
||||
if (returnData == 0)
|
||||
@@ -30,7 +31,8 @@ void IOCP::registerSocket(IOCPPASSINDATA* data) {
|
||||
// fcntl(data->socket->sock, F_SETFL, flags);
|
||||
|
||||
struct epoll_event ev;
|
||||
ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
|
||||
ev.events = EPOLLIN | EPOLLONESHOT;
|
||||
data->sendQueue = std::make_shared<std::queue<IOCPPASSINDATA*>>();
|
||||
ev.data.ptr = data;
|
||||
int rc = epoll_ctl(epollfd_, EPOLL_CTL_ADD, data->socket->sock, &ev);
|
||||
if (rc < 0)
|
||||
@@ -45,7 +47,7 @@ int IOCP::recv(Chattr::IOCPPASSINDATA* data, int bufferCount) {
|
||||
return ::WSARecv(data->socket->sock, &data->wsabuf, bufferCount, &recvbytes, &flags, &data->overlapped, NULL);
|
||||
#elif __linux__
|
||||
struct epoll_event ev;
|
||||
ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
|
||||
ev.events = EPOLLIN | EPOLLONESHOT;
|
||||
ev.data.ptr = data;
|
||||
return ::epoll_ctl(epollfd_, EPOLL_CTL_MOD, data->socket->sock, &ev);
|
||||
#endif
|
||||
@@ -58,11 +60,9 @@ int IOCP::send(Chattr::IOCPPASSINDATA* data, int bufferCount, int __flags, bool
|
||||
return ::WSASend(data->socket->sock, &data->wsabuf, bufferCount, &sendbytes, __flags, &data->overlapped, NULL);
|
||||
#elif __linux__
|
||||
struct epoll_event ev;
|
||||
if (client)
|
||||
ev.events = EPOLLIN | EPOLLOUT | EPOLLET | EPOLLONESHOT;
|
||||
else
|
||||
ev.events = EPOLLOUT | EPOLLET | EPOLLONESHOT;
|
||||
ev.events = EPOLLOUT | EPOLLONESHOT;
|
||||
ev.data.ptr = data;
|
||||
data->sendQueue->push(data);
|
||||
return ::epoll_ctl(epollfd_, EPOLL_CTL_MOD, data->socket->sock, &ev);
|
||||
#endif
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user