|
@@ -1289,9 +1289,13 @@ SCTP_STATIC void sctp_close(struct sock *sk, long timeout)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime)
|
|
|
|
- sctp_primitive_ABORT(asoc, NULL);
|
|
|
|
- else
|
|
|
|
|
|
+ if (sock_flag(sk, SOCK_LINGER) && !sk->sk_lingertime) {
|
|
|
|
+ struct sctp_chunk *chunk;
|
|
|
|
+
|
|
|
|
+ chunk = sctp_make_abort_user(asoc, NULL, 0);
|
|
|
|
+ if (chunk)
|
|
|
|
+ sctp_primitive_ABORT(asoc, chunk);
|
|
|
|
+ } else
|
|
sctp_primitive_SHUTDOWN(asoc, NULL);
|
|
sctp_primitive_SHUTDOWN(asoc, NULL);
|
|
}
|
|
}
|
|
|
|
|