Hello,

So I did poke around and it looks like tcp_notify() requires a small tweak. I
did check NetBSD and it looks like NetBSD is suffering from the same glitch
(unless I'm missing something).

The change below makes tcp_notify() to indicate ICMP unreachable errors for not
connected sockets immediately.

OK?

thanks and
regards
sashan

--------8<---------------8<---------------8<------------------8<--------
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index f1aa5b058f1..02dc41b4d45 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -574,9 +574,13 @@ tcp_notify(struct inpcb *inp, int error)
         */
        if (tp->t_state == TCPS_ESTABLISHED &&
             (error == EHOSTUNREACH || error == ENETUNREACH ||
-             error == EHOSTDOWN)) {
+             error == EHOSTDOWN))
                return;
-       } else if (TCPS_HAVEESTABLISHED(tp->t_state) == 0 &&
+       else if (TCPS_HAVEESTABLISHED(tp->t_state) == 0 &&
+            (error == EHOSTUNREACH || error == ENETUNREACH ||
+             error == EHOSTDOWN || error == ECONNREFUSED))
+               so->so_error = error;
+       else if (TCPS_HAVEESTABLISHED(tp->t_state) == 0 &&
            tp->t_rxtshift > 3 && tp->t_softerror)
                so->so_error = error;
        else

Reply via email to