]> code.citadel.org Git - citadel.git/blobdiff - citadel/event_client.c
EVENTClient: rather use the FD found on our internal structures then searching it...
[citadel.git] / citadel / event_client.c
index c02f3bbea048bdde5a01d9b36ef353d1f4fc84a5..774d3e86cecf506087eb2de1b87c5a7c7b17880c 100644 (file)
@@ -495,8 +495,8 @@ IO_send_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                                StrBufPlain(IO->ErrMsg, errmsg, -1);
                        break;
                default:
-                       rc = StrBuf_write_one_chunk_callback(watcher->fd,
-                                                            0/*TODO*/,
+                       rc = StrBuf_write_one_chunk_callback(IO->SendBuf.fd,
+                                                            0,
                                                             &IO->SendBuf);
                }
 
@@ -584,7 +584,12 @@ IO_send_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                }
        }
        else if (rc < 0) {
-               IO_Timeout_callback(loop, &IO->rw_timeout, revents);
+               if (errno != EAGAIN) {
+                       EV_syslog(LOG_DEBUG,
+                                 "EVENT: Socket Invalid! [%d] [%s] [%d]\n",
+                                 errno, strerror(errno), IO->SendBuf.fd);
+                       IO_Timeout_callback(loop, &IO->rw_timeout, revents);
+               }
        }
        /* else : must write more. */
 }
@@ -768,8 +773,8 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                }
                break;
        default:
-               nbytes = StrBuf_read_one_chunk_callback(watcher->fd,
-                                                       0 /*TODO */,
+               nbytes = StrBuf_read_one_chunk_callback(IO->RecvBuf.fd,
+                                                       0,
                                                        &IO->RecvBuf);
                break;
        }
@@ -806,12 +811,14 @@ IO_recv_callback(struct ev_loop *loop, ev_io *watcher, int revents)
                IO_Timeout_callback(loop, &IO->rw_timeout, revents);
                return;
        } else if (nbytes == -1) {
-               // FD is gone. kick it. 
-               StopClientWatchers(IO);
-               EV_syslog(LOG_DEBUG,
-                         "EVENT: Socket Invalid! %s \n",
-                         strerror(errno));
-               ShutDownCLient(IO);
+               if (errno != EAGAIN) {
+                       // FD is gone. kick it. 
+                       StopClientWatchers(IO);
+                       EV_syslog(LOG_DEBUG,
+                                 "EVENT: Socket Invalid! [%d] [%s] [%d]\n",
+                                 errno, strerror(errno), IO->SendBuf.fd);
+                       ShutDownCLient(IO);
+               }
                return;
        }
 }