Explorar el Código

send MSG_NOSIGNAL

ithewei hace 2 años
padre
commit
7e4e72c8a0
Se han modificado 1 ficheros con 9 adiciones y 11 borrados
  1. 9 11
      event/nio.c

+ 9 - 11
event/nio.c

@@ -250,11 +250,7 @@ static int __nio_read(hio_t* io, void* buf, int len) {
         nread = hssl_read(io->ssl, buf, len);
         break;
     case HIO_TYPE_TCP:
-#ifdef OS_UNIX
-        nread = read(io->fd, buf, len);
-#else
         nread = recv(io->fd, buf, len, 0);
-#endif
         break;
     case HIO_TYPE_UDP:
     case HIO_TYPE_KCP:
@@ -279,11 +275,13 @@ static int __nio_write(hio_t* io, const void* buf, int len) {
         nwrite = hssl_write(io->ssl, buf, len);
         break;
     case HIO_TYPE_TCP:
-#ifdef OS_UNIX
-        nwrite = write(io->fd, buf, len);
-#else
-        nwrite = send(io->fd, buf, len, 0);
+    {
+        int flag = 0;
+#ifdef MSG_NOSIGNAL
+        flag |= MSG_NOSIGNAL;
 #endif
+        nwrite = send(io->fd, buf, len, flag);
+    }
         break;
     case HIO_TYPE_UDP:
     case HIO_TYPE_KCP:
@@ -314,7 +312,7 @@ read:
     // printd("read retval=%d\n", nread);
     if (nread < 0) {
         err = socket_errno();
-        if (err == EAGAIN) {
+        if (err == EAGAIN || err == EINTR) {
             // goto read_done;
             return;
         } else if (err == EMSGSIZE) {
@@ -367,7 +365,7 @@ write:
     // printd("write retval=%d\n", nwrite);
     if (nwrite < 0) {
         err = socket_errno();
-        if (err == EAGAIN) {
+        if (err == EAGAIN || err == EINTR) {
             hrecursive_mutex_unlock(&io->write_mutex);
             return;
         } else {
@@ -497,7 +495,7 @@ try_write:
         // printd("write retval=%d\n", nwrite);
         if (nwrite < 0) {
             err = socket_errno();
-            if (err == EAGAIN) {
+            if (err == EAGAIN || err == EINTR) {
                 nwrite = 0;
                 hlogw("try_write failed, enqueue!");
                 goto enqueue;