Add Communicator::shutdown() for server task to close connection.

This commit is contained in:
Xie Han
2023-08-10 21:38:53 +08:00
parent b43078530a
commit e4b2d200bc
3 changed files with 36 additions and 0 deletions
+5
View File
@@ -144,6 +144,11 @@ public:
return this->comm.reply(session);
}
int shutdown(CommSession *session)
{
return this->comm.shutdown(session);
}
int push(const void *buf, size_t size, CommSession *session)
{
return this->comm.push(buf, size, session);
+29
View File
@@ -1799,6 +1799,35 @@ int Communicator::push(const void *buf, size_t size, CommSession *session)
return ret;
}
int Communicator::shutdown(CommSession *session)
{
CommTarget *target = session->target;
struct CommConnEntry *entry;
int ret;
if (session->passive != 1)
{
errno = session->passive ? ENOENT : EPERM;
return -1;
}
session->passive = 2;
pthread_mutex_lock(&target->mutex);
if (!list_empty(&target->idle_list))
{
entry = list_entry(target->idle_list.next, struct CommConnEntry, list);
ret = mpoller_del(entry->sockfd, entry->mpoller);
}
else
{
errno = ENOENT;
ret = -1;
}
pthread_mutex_unlock(&target->mutex);
return ret;
}
int Communicator::sleep(SleepSession *session)
{
struct timespec value;
+2
View File
@@ -268,6 +268,8 @@ public:
int push(const void *buf, size_t size, CommSession *session);
int shutdown(CommSession *session);
int bind(CommService *service);
void unbind(CommService *service);