mirror of
https://github.com/cloudwu/skynet.git
synced 2026-07-25 04:33:05 +00:00
14
gate/mread.c
14
gate/mread.c
@@ -449,11 +449,12 @@ _read_one(struct mread_pool * self) {
|
|||||||
if (ret == LISTENSOCKET) {
|
if (ret == LISTENSOCKET) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
if (writeflag) {
|
if (writeflag && ret->status != SOCKET_CLOSED) {
|
||||||
client_send(&ret->client, ret->fd);
|
client_send(&ret->client, ret->fd);
|
||||||
try_close(self, ret);
|
try_close(self, ret);
|
||||||
}
|
}
|
||||||
if (readflag)
|
if (readflag && ret->status != SOCKET_HALFCLOSE &&
|
||||||
|
ret->status != SOCKET_CLOSED)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -527,10 +528,10 @@ mread_poll(struct mread_pool * self , int timeout) {
|
|||||||
return self->active;
|
return self->active;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (self->closed > 0 ) {
|
|
||||||
return _report_closed(self);
|
|
||||||
}
|
|
||||||
if (self->queue_head >= self->queue_len) {
|
if (self->queue_head >= self->queue_len) {
|
||||||
|
if (self->closed > 0 ) {
|
||||||
|
return _report_closed(self);
|
||||||
|
}
|
||||||
if (_read_queue(self, timeout) == -1) {
|
if (_read_queue(self, timeout) == -1) {
|
||||||
self->active = -1;
|
self->active = -1;
|
||||||
return -1;
|
return -1;
|
||||||
@@ -778,8 +779,7 @@ mread_closed(struct mread_pool * self) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
struct socket * s = &self->sockets[self->active];
|
struct socket * s = &self->sockets[self->active];
|
||||||
if ((s->status == SOCKET_CLOSED ||
|
if (s->status == SOCKET_CLOSED && s->node == NULL) {
|
||||||
s->status == SOCKET_HALFCLOSE) && s->node == NULL) {
|
|
||||||
mread_yield(self);
|
mread_yield(self);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user