}
}
else if (rc < 0) {
- IO_Timeout_callback(loop, &IO->rw_timeout, revents);
+ if (errno != EAGAIN) {
+ IO_Timeout_callback(loop, &IO->rw_timeout, revents);
+ }
}
/* else : must write more. */
}
static void
set_start_callback(struct ev_loop *loop, AsyncIO *IO, int revents)
{
+ ev_timer_stop(event_base, &IO->conn_fail);
+ ev_timer_start(event_base, &IO->rw_timeout);
+
switch(IO->NextState) {
case eReadMore:
case eReadMessage:
(void*)&so_err,
&lon);
- if ((err == 0) && (so_err == 111))
+ if ((err == 0) && (so_err != 0))
{
EV_syslog(LOG_DEBUG, "connect() failed [%d][%s]\n",
so_err,
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! %s \n",
+ strerror(errno));
+ ShutDownCLient(IO);
+ }
return;
}
}
if (rc >= 0){
EVM_syslog(LOG_DEBUG, "connect() immediate success.\n");
set_start_callback(event_base, IO, 0);
- ev_timer_start(event_base, &IO->rw_timeout);
return IO->NextState;
}
else if (errno == EINPROGRESS) {