Adding a FIN message to differentiate normal TCP closing from failures
Signed-off-by: Aurelien Bouteiller <bouteill@icl.utk.edu>
Этот коммит содержится в:
родитель
b7be64482a
Коммит
6b3be224d4
@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2017 The University of Tennessee and The University
|
||||
* Copyright (c) 2004-2020 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
@ -535,6 +535,19 @@ void mca_btl_tcp_endpoint_close(mca_btl_base_endpoint_t* btl_endpoint)
|
||||
btl_endpoint->endpoint_cache_length = 0;
|
||||
#endif /* MCA_BTL_TCP_ENDPOINT_CACHE */
|
||||
|
||||
/* send a message before closing to differentiate between failures and
|
||||
* clean disconnect during finalize */
|
||||
if( MCA_BTL_TCP_CONNECTED == btl_endpoint->endpoint_state ) {
|
||||
mca_btl_tcp_hdr_t fin_msg = {
|
||||
.base.tag = 0,
|
||||
.type = MCA_BTL_TCP_HDR_TYPE_FIN,
|
||||
.count = 0,
|
||||
.size = 0,
|
||||
};
|
||||
mca_btl_tcp_endpoint_send_blocking(btl_endpoint,
|
||||
&fin_msg, sizeof(fin_msg));
|
||||
}
|
||||
|
||||
CLOSE_THE_SOCKET(btl_endpoint->endpoint_sd);
|
||||
btl_endpoint->endpoint_sd = -1;
|
||||
/**
|
||||
|
@ -3,7 +3,7 @@
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2016 The University of Tennessee and The University
|
||||
* Copyright (c) 2004-2020 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
@ -273,6 +273,10 @@ bool mca_btl_tcp_frag_recv(mca_btl_tcp_frag_t* frag, int sd)
|
||||
if(frag->iov_cnt == 0) {
|
||||
if (btl_endpoint->endpoint_nbo && frag->iov_idx == 1) MCA_BTL_TCP_HDR_NTOH(frag->hdr);
|
||||
switch(frag->hdr.type) {
|
||||
case MCA_BTL_TCP_HDR_TYPE_FIN:
|
||||
frag->endpoint->endpoint_state = MCA_BTL_TCP_CLOSED;
|
||||
mca_btl_tcp_endpoint_close(frag->endpoint);
|
||||
break;
|
||||
case MCA_BTL_TCP_HDR_TYPE_SEND:
|
||||
if(frag->iov_idx == 1 && frag->hdr.size) {
|
||||
frag->segments[0].seg_addr.pval = frag+1;
|
||||
|
@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2004-2005 The University of Tennessee and The University
|
||||
* Copyright (c) 2004-2020 The University of Tennessee and The University
|
||||
* of Tennessee Research Foundation. All rights
|
||||
* reserved.
|
||||
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
|
||||
@ -33,6 +33,7 @@ BEGIN_C_DECLS
|
||||
#define MCA_BTL_TCP_HDR_TYPE_SEND 1
|
||||
#define MCA_BTL_TCP_HDR_TYPE_PUT 2
|
||||
#define MCA_BTL_TCP_HDR_TYPE_GET 3
|
||||
#define MCA_BTL_TCP_HDR_TYPE_FIN 4
|
||||
|
||||
struct mca_btl_tcp_hdr_t {
|
||||
mca_btl_base_header_t base;
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user