gcoap_dtls: destroy session in _tl_send only on connection errors

This commit is contained in:
Martine Lenders 2021-10-07 14:55:57 +02:00
parent 423da42d1c
commit e74b54d3ae
No known key found for this signature in database
GPG Key ID: 2134D77A5336DD80

View File

@ -910,9 +910,18 @@ static ssize_t _tl_send(gcoap_socket_t *sock, const void *data, size_t len,
/* send application data */
res = sock_dtls_send(sock->socket.dtls, &sock->ctx_dtls_session, data, len,
SOCK_NO_TIMEOUT);
if (res <= 0 ) {
switch (res) {
case -EHOSTUNREACH:
case -ENOTCONN:
case 0:
DEBUG("gcoap: DTLS sock not connected or remote unreachable. "
"Destroying session.\n");
dsm_remove(sock->socket.dtls, &sock->ctx_dtls_session);
sock_dtls_session_destroy(sock->socket.dtls, &sock->ctx_dtls_session);
break;
default:
/* Temporary error. Keeping the DTLS session */
break;
}
#endif
} else if (sock->type == GCOAP_SOCKET_TYPE_UDP) {