diff --git a/skynet-src/socket_epoll.h b/skynet-src/socket_epoll.h index cd1f9018..58a26afd 100644 --- a/skynet-src/socket_epoll.h +++ b/skynet-src/socket_epoll.h @@ -60,6 +60,7 @@ sp_wait(int efd, struct event *e, int max) { e[i].write = (flag & EPOLLOUT) != 0; e[i].read = (flag & (EPOLLIN | EPOLLHUP)) != 0; e[i].error = (flag & EPOLLERR) != 0; + e[i].eof = false; } return n; diff --git a/skynet-src/socket_kqueue.h b/skynet-src/socket_kqueue.h index 8aa31203..fc282a9a 100644 --- a/skynet-src/socket_kqueue.h +++ b/skynet-src/socket_kqueue.h @@ -73,9 +73,11 @@ sp_wait(int kfd, struct event *e, int max) { for (i=0;idata = (char *)err; return SOCKET_ERR; } + if(e->eof) { + force_close(ss, s, &l, result); + return SOCKET_CLOSE; + } break; } }