From d3d4f9f5e9c592c661604d0f5995e6ac2f8507e9 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Fri, 15 May 2009 23:06:41 +0000 Subject: [PATCH] PR: 1929 Submitted by: Robin Seggelmann Approved by: steve@openssl.org DTLS MTU bug. --- crypto/bio/bss_dgram.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/crypto/bio/bss_dgram.c b/crypto/bio/bss_dgram.c index 173d871f56..1e4666822f 100644 --- a/crypto/bio/bss_dgram.c +++ b/crypto/bio/bss_dgram.c @@ -70,7 +70,9 @@ #include #endif +#ifdef OPENSSL_SYS_LINUX #define IP_MTU 14 /* linux is lame */ +#endif #ifdef WATT32 #define sock_write SockWrite /* Watt-32 uses same names */ @@ -401,22 +403,26 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr) break; #endif case BIO_CTRL_DGRAM_QUERY_MTU: - sockopt_len = sizeof(sockopt_val); +#ifdef IP_MTU + sockopt_len = sizeof(sockopt_val); if ((ret = getsockopt(b->num, IPPROTO_IP, IP_MTU, (void *)&sockopt_val, &sockopt_len)) < 0 || sockopt_val < 0) { ret = 0; } else { - data->mtu = sockopt_val; + data->mtu = sockopt_val - 20 - 8; /* Subtract IP and UDP header */ ret = data->mtu; } +#else + ret = 0; +#endif break; case BIO_CTRL_DGRAM_GET_MTU: return data->mtu; break; case BIO_CTRL_DGRAM_SET_MTU: - data->mtu = num; - ret = num; + data->mtu = num - 20 - 8; /* Subtract IP and UDP header */ + ret = data->mtu; break; case BIO_CTRL_DGRAM_SET_CONNECTED: to = (struct sockaddr *)ptr; -- 2.34.1