aboutsummaryrefslogtreecommitdiffstats
path: root/net/dccp/output.c
diff options
context:
space:
mode:
authorGerrit Renker <gerrit@erg.abdn.ac.uk>2007-12-13 09:25:01 -0500
committerDavid S. Miller <davem@davemloft.net>2008-01-28 17:57:48 -0500
commitb8599d20708fa3bde1e414689f3474560c2d990b (patch)
treeadeb51da63a75b03fa55ddbc4712c8359240a3bf /net/dccp/output.c
parent28be5440044d5b19b0331f79fb3e81845ad6d77e (diff)
[DCCP]: Support for server holding timewait state
This adds a socket option and signalling support for the case where the server holds timewait state on closing the connection, as described in RFC 4340, 8.3. Since holding timewait state at the server is the non-usual case, it is enabled via a socket option. Documentation for this socket option has been added. The setsockopt statement has been made resilient against different possible cases of expressing boolean `true' values using a suggestion by Ian McDonald. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> Signed-off-by: Ian McDonald <ian.mcdonald@jandi.co.nz> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/dccp/output.c')
-rw-r--r--net/dccp/output.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/dccp/output.c b/net/dccp/output.c
index e97584aa4898..b2e17910930d 100644
--- a/net/dccp/output.c
+++ b/net/dccp/output.c
@@ -567,8 +567,10 @@ void dccp_send_close(struct sock *sk, const int active)
567 567
568 /* Reserve space for headers and prepare control bits. */ 568 /* Reserve space for headers and prepare control bits. */
569 skb_reserve(skb, sk->sk_prot->max_header); 569 skb_reserve(skb, sk->sk_prot->max_header);
570 DCCP_SKB_CB(skb)->dccpd_type = dp->dccps_role == DCCP_ROLE_CLIENT ? 570 if (dp->dccps_role == DCCP_ROLE_SERVER && !dp->dccps_server_timewait)
571 DCCP_PKT_CLOSE : DCCP_PKT_CLOSEREQ; 571 DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSEREQ;
572 else
573 DCCP_SKB_CB(skb)->dccpd_type = DCCP_PKT_CLOSE;
572 574
573 if (active) { 575 if (active) {
574 dccp_write_xmit(sk, 1); 576 dccp_write_xmit(sk, 1);