diff --git a/skynet-src/socket_server.c b/skynet-src/socket_server.c index 98248134..6ed9efad 100644 --- a/skynet-src/socket_server.c +++ b/skynet-src/socket_server.c @@ -904,15 +904,20 @@ socket_server_poll(struct socket_server *ss, struct socket_message * result, int fprintf(stderr, "socket-server: invalid socket\n"); break; default: - if (e->write) { - int type = send_buffer(ss, s, result); + if (e->read) { + int type = forward_message(ss, s, result); + if (e->write) { + // Try to dispatch write message next step if write flag set. + e->read = false; + --ss->event_index; + } if (type == -1) break; clear_closed_event(ss, result, type); return type; } - if (e->read) { - int type = forward_message(ss, s, result); + if (e->write) { + int type = send_buffer(ss, s, result); if (type == -1) break; clear_closed_event(ss, result, type);