diff options
-rw-r--r-- | net/dccp/output.c | 13 | ||||
-rw-r--r-- | net/dccp/proto.c | 18 |
2 files changed, 12 insertions, 19 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c index 7caa7f57bb7e..e97584aa4898 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
@@ -574,7 +574,18 @@ void dccp_send_close(struct sock *sk, const int active) | |||
574 | dccp_write_xmit(sk, 1); | 574 | dccp_write_xmit(sk, 1); |
575 | dccp_skb_entail(sk, skb); | 575 | dccp_skb_entail(sk, skb); |
576 | dccp_transmit_skb(sk, skb_clone(skb, prio)); | 576 | dccp_transmit_skb(sk, skb_clone(skb, prio)); |
577 | /* FIXME do we need a retransmit timer here? */ | 577 | /* |
578 | * Retransmission timer for active-close: RFC 4340, 8.3 requires | ||
579 | * to retransmit the Close/CloseReq until the CLOSING/CLOSEREQ | ||
580 | * state can be left. The initial timeout is 2 RTTs. | ||
581 | * Since RTT measurement is done by the CCIDs, there is no easy | ||
582 | * way to get an RTT sample. The fallback RTT from RFC 4340, 3.4 | ||
583 | * is too low (200ms); we use a high value to avoid unnecessary | ||
584 | * retransmissions when the link RTT is > 0.2 seconds. | ||
585 | * FIXME: Let main module sample RTTs and use that instead. | ||
586 | */ | ||
587 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, | ||
588 | DCCP_TIMEOUT_INIT, DCCP_RTO_MAX); | ||
578 | } else | 589 | } else |
579 | dccp_transmit_skb(sk, skb); | 590 | dccp_transmit_skb(sk, skb); |
580 | } | 591 | } |
diff --git a/net/dccp/proto.c b/net/dccp/proto.c index 60f40ec72ff3..8a73c8f98d76 100644 --- a/net/dccp/proto.c +++ b/net/dccp/proto.c | |||
@@ -996,24 +996,6 @@ adjudge_to_death: | |||
996 | if (state != DCCP_CLOSED && sk->sk_state == DCCP_CLOSED) | 996 | if (state != DCCP_CLOSED && sk->sk_state == DCCP_CLOSED) |
997 | goto out; | 997 | goto out; |
998 | 998 | ||
999 | /* | ||
1000 | * The last release_sock may have processed the CLOSE or RESET | ||
1001 | * packet moving sock to CLOSED state, if not we have to fire | ||
1002 | * the CLOSE/CLOSEREQ retransmission timer, see "8.3. Termination" | ||
1003 | * in draft-ietf-dccp-spec-11. -acme | ||
1004 | */ | ||
1005 | if (sk->sk_state == DCCP_CLOSING) { | ||
1006 | /* FIXME: should start at 2 * RTT */ | ||
1007 | /* Timer for repeating the CLOSE/CLOSEREQ until an answer. */ | ||
1008 | inet_csk_reset_xmit_timer(sk, ICSK_TIME_RETRANS, | ||
1009 | inet_csk(sk)->icsk_rto, | ||
1010 | DCCP_RTO_MAX); | ||
1011 | #if 0 | ||
1012 | /* Yeah, we should use sk->sk_prot->orphan_count, etc */ | ||
1013 | dccp_set_state(sk, DCCP_CLOSED); | ||
1014 | #endif | ||
1015 | } | ||
1016 | |||
1017 | if (sk->sk_state == DCCP_CLOSED) | 999 | if (sk->sk_state == DCCP_CLOSED) |
1018 | inet_csk_destroy_sock(sk); | 1000 | inet_csk_destroy_sock(sk); |
1019 | 1001 | ||