diff options
Diffstat (limited to 'http_put.c')
-rw-r--r-- | http_put.c | 48 |
1 files changed, 16 insertions, 32 deletions
@@ -440,42 +440,25 @@ static unsigned last_data_recv(int fd) MOG_NOINLINE static void read_err_dbg(struct mog_fd *mfd, ssize_t r) { + static const char no_ip[] = "(unconnected)"; + int save_errno = errno; union mog_sockaddr any; - char addrbuf[MOG_NI_MAXHOST]; - char portbuf[MOG_NI_MAXSERV]; + struct mog_ni ni; const char *addr; - static const char no_ip[] = "unconnected"; const char *path = "(unknown)"; long long bytes = -1; const char *errfmt; - unsigned last; + socklen_t len = (socklen_t)sizeof(any); + unsigned last = last_data_recv(mfd->fd); + int rc = getpeername(mfd->fd, mog_sockaddr_sa(&any), &len); - PRESERVE_ERRNO(last = last_data_recv(mfd->fd)); - - portbuf[0] = 0; - PRESERVE_ERRNO(do { - socklen_t len = (socklen_t)sizeof(any); - socklen_t addrlen = (socklen_t)sizeof(addrbuf); - socklen_t portlen = (socklen_t)(sizeof(portbuf)); - int rc = getpeername(mfd->fd, mog_sockaddr_sa(&any), &len); - - if (rc == 0) { - rc = getnameinfo(mog_sockaddr_sa(&any), len, - addrbuf, addrlen, - portbuf + 1, portlen - 1, - NI_NUMERICHOST|NI_NUMERICSERV); - if (rc == 0) { - addr = addrbuf; - portbuf[0] = ':'; - } else { - addr = gai_strerror(rc); - } - } else { - syslog(LOG_ERR, "getpeername() failed for fd=%d: %m", - mfd->fd); - addr = no_ip; - } - } while (0)); + if (rc == 0) { + rc = mog_nameinfo(&any, len, &ni); + addr = rc == 0 ? ni.ni_host : gai_strerror(rc); + } else { + syslog(LOG_ERR, "getpeername() failed for fd=%d: %m", mfd->fd); + addr = no_ip; + } if (mfd->as.http.forward) { path = mfd->as.http.forward->as.file.path; @@ -485,11 +468,12 @@ MOG_NOINLINE static void read_err_dbg(struct mog_fd *mfd, ssize_t r) #define PFX "PUT %s failed from %s%s after %lld bytes: " errfmt = (r == 0) ? PFX"premature EOF" : PFX"%m"; #undef PFX - syslog(LOG_ERR, errfmt, path, addr, portbuf, bytes); + errno = save_errno; + syslog(LOG_ERR, errfmt, path, addr, ni.ni_serv, bytes); if (last != (unsigned)-1) syslog(LOG_ERR, "last_data_recv=%ums from %s%s for PUT %s", - last, addr, portbuf, path); + last, addr, ni.ni_serv, path); } static enum mog_next identity_put_in_progress(struct mog_fd *mfd) |