diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2012-10-02 13:03:11 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2012-10-02 13:03:11 +0000 |
| commit | e2668e870ba25ca13ace29ee7c0669582cf458b9 (patch) | |
| tree | 9cdb559b43ff78ff2cd2d398d8c2b4e55a268c53 | |
| parent | c953610431edd80ffcd4d343e0d7b49729c7bd0d (diff) | |
Notes
| -rw-r--r-- | sys/netinet/tcp_usrreq.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index 8a1e31b8480c1..5f7fb0cdf5e82 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -1443,7 +1443,6 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) case TCP_KEEPIDLE: case TCP_KEEPINTVL: - case TCP_KEEPCNT: case TCP_KEEPINIT: INP_WUNLOCK(inp); error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui)); @@ -1476,13 +1475,6 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) tcp_timer_activate(tp, TT_2MSL, TP_MAXIDLE(tp)); break; - case TCP_KEEPCNT: - tp->t_keepcnt = ui; - if ((tp->t_state == TCPS_FIN_WAIT_2) && - (TP_MAXIDLE(tp) > 0)) - tcp_timer_activate(tp, TT_2MSL, - TP_MAXIDLE(tp)); - break; case TCP_KEEPINIT: tp->t_keepinit = ui; if (tp->t_state == TCPS_SYN_RECEIVED || @@ -1494,6 +1486,21 @@ tcp_ctloutput(struct socket *so, struct sockopt *sopt) INP_WUNLOCK(inp); break; + case TCP_KEEPCNT: + INP_WUNLOCK(inp); + error = sooptcopyin(sopt, &ui, sizeof(ui), sizeof(ui)); + if (error) + return (error); + + INP_WLOCK_RECHECK(inp); + tp->t_keepcnt = ui; + if ((tp->t_state == TCPS_FIN_WAIT_2) && + (TP_MAXIDLE(tp) > 0)) + tcp_timer_activate(tp, TT_2MSL, + TP_MAXIDLE(tp)); + INP_WUNLOCK(inp); + break; + default: INP_WUNLOCK(inp); error = ENOPROTOOPT; |
