diff options
author | Dr. Stephen Henson <steve@openssl.org> | 2009-05-15 23:06:41 +0000 |
---|---|---|
committer | Dr. Stephen Henson <steve@openssl.org> | 2009-05-15 23:06:41 +0000 |
commit | d3d4f9f5e9c592c661604d0f5995e6ac2f8507e9 (patch) | |
tree | 80f2c351d1739cc444bee93e9e018f0117de98a3 /crypto/bio | |
parent | eb38b26dbc2dd15bb6e0a351d0826e7da09b1782 (diff) |
PR: 1929
Submitted by: Robin Seggelmann <seggelmann@fh-muenster.de>
Approved by: steve@openssl.org
DTLS MTU bug.
Diffstat (limited to 'crypto/bio')
-rw-r--r-- | crypto/bio/bss_dgram.c | 14 |
1 files 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 <sys/timeb.h> #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; |