From 60cdbf46936ba91e51ec3f28b3172822161eee49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Tue, 7 Aug 2012 15:17:18 +0800 Subject: [PATCH] try more when writev return EINTR --- gate/mread.c | 1 - service_client.c | 13 ++++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/gate/mread.c b/gate/mread.c index 3db2f830..ab06575f 100644 --- a/gate/mread.c +++ b/gate/mread.c @@ -1,6 +1,5 @@ #include "mread.h" #include "ringbuffer.h" -#include "map.h" #include #include diff --git a/service_client.c b/service_client.c index fec975c7..cada035b 100644 --- a/service_client.c +++ b/service_client.c @@ -1,6 +1,7 @@ #include "skynet.h" #include +#include #include #include #include @@ -20,7 +21,17 @@ _cb(struct skynet_context * context, void * ud, int session, const char * addr, buffer[1].iov_base = (void *)msg; buffer[1].iov_len = sz; - writev(fd, buffer, 2); + for (;;) { + int err = writev(fd, buffer, 2); + if (err < 0) { + switch (errno) { + case EAGAIN: + case EINTR: + continue; + } + return; + } + } } int