diff --git a/include/proto/fd.h b/include/proto/fd.h index 9c7f66be2..3c778abc4 100644 --- a/include/proto/fd.h +++ b/include/proto/fd.h @@ -314,8 +314,7 @@ static inline void fd_update_events(int fd, unsigned char evts) ((evts & FD_EV_READY_R) ? FD_POLL_IN : 0) | ((evts & FD_EV_READY_W) ? FD_POLL_OUT : 0) | ((evts & FD_EV_SHUT_R) ? FD_POLL_HUP : 0) | - ((evts & FD_EV_ERR_R) ? FD_POLL_ERR : 0) | - ((evts & FD_EV_ERR_W) ? FD_POLL_ERR : 0); + ((evts & FD_EV_ERR_RW) ? FD_POLL_ERR : 0); /* SHUTW reported while FD was active for writes is an error */ if ((fdtab[fd].ev & FD_EV_ACTIVE_W) && (evts & FD_EV_SHUT_W)) @@ -327,11 +326,11 @@ static inline void fd_update_events(int fd, unsigned char evts) /* both sides stopped */ must_stop = FD_POLL_IN | FD_POLL_OUT; } - else if (unlikely(!fd_recv_active(fd) && (evts & (FD_EV_READY_R | FD_EV_SHUT_R | FD_EV_ERR_R)))) { + else if (unlikely(!fd_recv_active(fd) && (evts & (FD_EV_READY_R | FD_EV_SHUT_R | FD_EV_ERR_RW)))) { /* only send remains */ must_stop = FD_POLL_IN; } - else if (unlikely(!fd_send_active(fd) && (evts & (FD_EV_READY_W | FD_EV_SHUT_W | FD_EV_ERR_W)))) { + else if (unlikely(!fd_send_active(fd) && (evts & (FD_EV_READY_W | FD_EV_SHUT_W | FD_EV_ERR_RW)))) { /* only recv remains */ must_stop = FD_POLL_OUT; } diff --git a/include/types/fd.h b/include/types/fd.h index 2630b66de..e62e2a4f3 100644 --- a/include/types/fd.h +++ b/include/types/fd.h @@ -57,12 +57,12 @@ enum { #define FD_EV_ACTIVE_R_BIT 0 #define FD_EV_READY_R_BIT 1 #define FD_EV_SHUT_R_BIT 2 -#define FD_EV_ERR_R_BIT 3 +/* unused: 3 */ #define FD_EV_ACTIVE_W_BIT 4 #define FD_EV_READY_W_BIT 5 #define FD_EV_SHUT_W_BIT 6 -#define FD_EV_ERR_W_BIT 7 +#define FD_EV_ERR_RW_BIT 7 /* and flag values */ #define FD_EV_ACTIVE_R (1U << FD_EV_ACTIVE_R_BIT) @@ -78,10 +78,10 @@ enum { #define FD_EV_SHUT_W (1U << FD_EV_SHUT_W_BIT) #define FD_EV_SHUT_RW (FD_EV_SHUT_R | FD_EV_SHUT_W) -/* note that when FD_EV_ERR is set, SHUT is also set */ -#define FD_EV_ERR_R (1U << FD_EV_ERR_R_BIT) -#define FD_EV_ERR_W (1U << FD_EV_ERR_W_BIT) -#define FD_EV_ERR_RW (FD_EV_ERR_R | FD_EV_ERR_W) +/* note that when FD_EV_ERR is set, SHUT is also set. Also, ERR is for both + * directions at once (write error, socket dead, etc). + */ +#define FD_EV_ERR_RW (1U << FD_EV_ERR_RW_BIT) /* This is the value used to mark a file descriptor as dead. This value is