diff options
Diffstat (limited to 'http.c')
-rw-r--r-- | http.c | 31 |
1 files changed, 23 insertions, 8 deletions
@@ -205,6 +205,28 @@ static enum mog_next http_run(struct mog_fd *mfd, struct mog_rbuf *rbuf, return MOG_NEXT_ACTIVE; } +static MOG_NOINLINE enum mog_next +http_client_died(struct mog_fd *mfd, size_t buf_len, int save_err) +{ + struct mog_ni ni; + + /* TODO: support nameinfo */ + TRACE(CMOGSTORED_HTTP_RDERR(buf_len, save_err)); + + switch (save_err) { + case ECONNRESET: + case ENOTCONN: + return MOG_NEXT_CLOSE; + /* these errors are too common to log, normally */ + } + + mog_nameinfo(&mfd->as.http.mpa, &ni); + errno = save_err; + syslog(LOG_NOTICE, "http client died: %m (%s%s)", + ni.ni_host, ni.ni_serv); + return MOG_NEXT_CLOSE; +} + static enum mog_next __http_queue_step(struct mog_fd *mfd) { struct mog_http *http = &mfd->as.http; @@ -281,15 +303,8 @@ parse: } return MOG_NEXT_WAIT_RD; case EINTR: goto reread; - case ECONNRESET: - case ENOTCONN: - /* these errors are too common to log, normally */ - TRACE(CMOGSTORED_HTTP_RDERR(buf_len, errno)); - return MOG_NEXT_CLOSE; default: - TRACE(CMOGSTORED_HTTP_RDERR(buf_len, errno)); - syslog(LOG_NOTICE, "http client died: %m"); - return MOG_NEXT_CLOSE; + return http_client_died(mfd, buf_len, errno); } } |