Handle EPIPE as a common connection close event.
This commit is contained in:
parent
0267f49fb2
commit
475977242a
3 changed files with 13 additions and 3 deletions
|
@ -434,6 +434,15 @@ bgp_sock_err(sock *sk, int err)
|
||||||
struct bgp_conn *conn = sk->data;
|
struct bgp_conn *conn = sk->data;
|
||||||
struct bgp_proto *p = conn->bgp;
|
struct bgp_proto *p = conn->bgp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This error hook may be called either asynchronously from main
|
||||||
|
* loop, or synchronously from sk_send(). But sk_send() is called
|
||||||
|
* only from bgp_tx() and bgp_kick_tx(), which are both called
|
||||||
|
* asynchronously from main loop. Moreover, they end if err hook is
|
||||||
|
* called. Therefore, we could suppose that it is always called
|
||||||
|
* asynchronously.
|
||||||
|
*/
|
||||||
|
|
||||||
bgp_store_error(p, conn, BE_SOCKET, err);
|
bgp_store_error(p, conn, BE_SOCKET, err);
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
|
|
|
@ -594,7 +594,7 @@ bgp_kick_tx(void *vconn)
|
||||||
struct bgp_conn *conn = vconn;
|
struct bgp_conn *conn = vconn;
|
||||||
|
|
||||||
DBG("BGP: kicking TX\n");
|
DBG("BGP: kicking TX\n");
|
||||||
while (bgp_fire_tx(conn))
|
while (bgp_fire_tx(conn) > 0)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -604,7 +604,7 @@ bgp_tx(sock *sk)
|
||||||
struct bgp_conn *conn = sk->data;
|
struct bgp_conn *conn = sk->data;
|
||||||
|
|
||||||
DBG("BGP: TX hook\n");
|
DBG("BGP: TX hook\n");
|
||||||
while (bgp_fire_tx(conn))
|
while (bgp_fire_tx(conn) > 0)
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1216,7 +1216,8 @@ sk_maybe_write(sock *s)
|
||||||
if (errno != EINTR && errno != EAGAIN)
|
if (errno != EINTR && errno != EAGAIN)
|
||||||
{
|
{
|
||||||
reset_tx_buffer(s);
|
reset_tx_buffer(s);
|
||||||
s->err_hook(s, errno);
|
/* EPIPE is just a connection close notification during TX */
|
||||||
|
s->err_hook(s, (errno != EPIPE) ? errno : 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Reference in a new issue