From: Leonid Rosenboim Date: Fri, 14 Dec 2012 19:12:17 +0000 (+0000) Subject: bgpd: uncork/nagle socket when sending BGP NOTIFY X-Git-Tag: frr-2.0-rc1~1700 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=86998bc2bc9506841250c8d49dd2df2464660a18;p=matthieu%2Ffrr.git bgpd: uncork/nagle socket when sending BGP NOTIFY This pushes out the NOTIFY message before closing a connection. Previously, the TCP_CORK bandwidth optimization code caused NOTIFY messages to disappear prior to when the connection is closed. * bgpd/bgp_packet.c: unset CORK, set NODELAY, and replace writen() by more correct write() Signed-off-by: David Lamparter --- diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index b0918fc52f..d115353f8b 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -723,13 +723,21 @@ bgp_write_notify (struct peer *peer) val = fcntl (peer->fd, F_GETFL, 0); fcntl (peer->fd, F_SETFL, val & ~O_NONBLOCK); - ret = writen (peer->fd, STREAM_DATA (s), stream_get_endp (s)); + /* Stop collecting data within the socket */ + sockopt_cork (peer->fd, 0); + + ret = write (peer->fd, STREAM_DATA (s), stream_get_endp (s)); if (ret <= 0) { BGP_EVENT_ADD (peer, TCP_fatal_error); return 0; } + /* Disable Nagle, make NOTIFY packet go out right away */ + val = 1; + (void) setsockopt (peer->fd, IPPROTO_TCP, TCP_NODELAY, + (char *) &val, sizeof (val)); + /* Retrieve BGP packet type. */ stream_set_getp (s, BGP_MARKER_SIZE + 2); type = stream_getc (s);