diff --git a/ssl/d1_both.c b/ssl/d1_both.c index 808d4d14eb4aaa10902ed445e3de1694b9f214f8..c5957bd6127b9b6d0ede01d80a6935c24bf9a0e5 100644 --- a/ssl/d1_both.c +++ b/ssl/d1_both.c @@ -260,6 +260,7 @@ int dtls1_do_write(SSL *s, int type) { int ret; int curr_mtu; + int retry = 1; unsigned int len, frag_off, mac_size, blocksize; if(!dtls1_query_mtu(s)) @@ -370,13 +371,15 @@ int dtls1_do_write(SSL *s, int type) * is fine and wait for an alert to handle the * retransmit */ - if ( BIO_ctrl(SSL_get_wbio(s), + if ( retry && BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0 ) { if(!(SSL_get_options(s) & SSL_OP_NO_QUERY_MTU)) { if(!dtls1_query_mtu(s)) return -1; + /* Have one more go */ + retry = 0; } else return -1;