Typo.
[openssl.git] / crypto / bio / bss_dgram.c
index ef739fcf5940be2fb71255a1ed80de9cf1eaa0c3..71ebe987b63e24c2d2273a220661bfd892332e73 100644 (file)
@@ -57,7 +57,6 @@
  *
  */
 
-#ifndef OPENSSL_NO_DGRAM
 
 #include <stdio.h>
 #include <errno.h>
@@ -65,6 +64,7 @@
 #include "cryptlib.h"
 
 #include <openssl/bio.h>
+#ifndef OPENSSL_NO_DGRAM
 
 #if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
 #include <sys/timeb.h>
@@ -308,7 +308,6 @@ static int dgram_read(BIO *b, char *out, int outl)
                        OPENSSL_assert(sa.len.s<=sizeof(sa.peer));
                        sa.len.i = (int)sa.len.s;
                        }
-               dgram_reset_rcv_timeout(b);
 
                if ( ! data->connected  && ret >= 0)
                        BIO_ctrl(b, BIO_CTRL_DGRAM_SET_PEER, 0, &sa.peer);
@@ -322,6 +321,8 @@ static int dgram_read(BIO *b, char *out, int outl)
                                data->_errno = get_last_socket_error();
                                }
                        }
+
+               dgram_reset_rcv_timeout(b);
                }
        return(ret);
        }
@@ -335,11 +336,21 @@ static int dgram_write(BIO *b, const char *in, int inl)
        if ( data->connected )
                ret=writesocket(b->num,in,inl);
        else
+               {
+               int peerlen = sizeof(data->peer);
+
+               if (data->peer.sa.sa_family == AF_INET)
+                       peerlen = sizeof(data->peer.sa_in);
+#if OPENSSL_USE_IPV6
+               else if (data->peer.sa.sa_family == AF_INET6)
+                       peerlen = sizeof(data->peer.sa_in6);
+#endif
 #if defined(NETWARE_CLIB) && defined(NETWARE_BSDSOCK)
-               ret=sendto(b->num, (char *)in, inl, 0, &data->peer.sa, sizeof(data->peer));
+               ret=sendto(b->num, (char *)in, inl, 0, &data->peer.sa, peerlen);
 #else
-               ret=sendto(b->num, in, inl, 0, &data->peer.sa, sizeof(data->peer));
+               ret=sendto(b->num, in, inl, 0, &data->peer.sa, peerlen);
 #endif
+               }
 
        BIO_clear_retry_flags(b);
        if (ret <= 0)
@@ -735,9 +746,13 @@ static int BIO_dgram_should_retry(int i)
                {
                err=get_last_socket_error();
 
-#if defined(OPENSSL_SYS_WINDOWS) && 0 /* more microsoft stupidity? perhaps not? Ben 4/1/99 */
-               if ((i == -1) && (err == 0))
-                       return(1);
+#if defined(OPENSSL_SYS_WINDOWS)
+       /* If the socket return value (i) is -1
+        * and err is unexpectedly 0 at this point,
+        * the error code was overwritten by
+        * another system call before this error
+        * handling is called.
+        */
 #endif
 
                return(BIO_dgram_non_fatal_error(err));
@@ -800,7 +815,6 @@ int BIO_dgram_non_fatal_error(int err)
                }
        return(0);
        }
-#endif
 
 static void get_current_time(struct timeval *t)
        {
@@ -818,3 +832,5 @@ static void get_current_time(struct timeval *t)
        gettimeofday(t, NULL);
 #endif
        }
+
+#endif