diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-07-09 00:14:56 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-07-10 00:56:29 +0000 |
commit | 9897d28bb57f2aa84f91b1a8594c7ecd30be8446 (patch) | |
tree | 1645a006661ceba008f7fe13bd915cf72a537063 | |
parent | 2c24cf070dfc9341462fcba59fab4c6b7b330938 (diff) | |
download | cmogstored-9897d28bb57f2aa84f91b1a8594c7ecd30be8446.tar.gz |
This should hopefully make failures easier to track down.
-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); } } |