From 9dd094daeb31368a84fcdca35550392b2442d249 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Sun, 2 Jan 2011 15:06:17 -0500 Subject: [PATCH] Save (and print) errno on socket error --- harness.c | 4 ++++ harness.h | 1 + relay.c | 3 ++- 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/harness.c b/harness.c index e7d1b80..9c891b3 100644 --- a/harness.c +++ b/harness.c @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -166,12 +167,14 @@ static void output_isr(struct bufferevent *bufev, IOHandle *h) { static void error_isr(struct bufferevent *bufev, short what, IOHandle *h) { unsigned short kind = what & ~(EVBUFFER_READ | EVBUFFER_WRITE); + int saved_errno = errno; info("error_isr 0x%04X fd %d\n", what, h->fd); h->error_direction = what & (EVBUFFER_READ | EVBUFFER_WRITE); if (kind == EVBUFFER_EOF) { h->eof = 1; } else { h->error_kind = kind; + h->error_errno = saved_errno; } awaken_waiters(h, EV_READ | EV_WRITE); } @@ -205,6 +208,7 @@ void delete_iohandle(IOHandle *h) { void iohandle_clear_error(IOHandle *h) { h->error_direction = 0; h->error_kind = 0; + h->error_errno = 0; } static void block_on_io(IOHandle *h, short event) { diff --git a/harness.h b/harness.h index 1bff1f6..552044c 100644 --- a/harness.h +++ b/harness.h @@ -24,6 +24,7 @@ typedef struct IOHandle { int eof; unsigned short error_direction; unsigned short error_kind; + int error_errno; } IOHandle; extern IOHandle *stdin_h; diff --git a/relay.c b/relay.c index 888e643..c9268e5 100644 --- a/relay.c +++ b/relay.c @@ -182,7 +182,8 @@ static void relay_main(node_t *n) { break; default: - warn("Relay handle error on fd %d: 0x%04X\n", r->fd, inh->error_kind); + warn("Relay handle error 0x%04X on fd %d: %d, %s\n", + inh->error_kind, r->fd, inh->error_errno, strerror(inh->error_errno)); break; } }