Update from HEAD.
authorDr. Stephen Henson <steve@openssl.org>
Fri, 15 May 2009 23:07:59 +0000 (23:07 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 15 May 2009 23:07:59 +0000 (23:07 +0000)
crypto/bio/bss_dgram.c

index 2aac67b09087b9f9edc6e8a9140dbe50f43b965c..20241500fac1c733e9f7eb8ef8d7ce487220463e 100644 (file)
@@ -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 */
@@ -334,22 +336,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;