Actually use UDP for DTLS in test client/server
diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index 9aacfee..8381150 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -839,12 +839,14 @@
     if( opt.server_addr == NULL)
         opt.server_addr = opt.server_name;
 
-    printf( "  . Connecting to tcp/%s/%-4d...", opt.server_addr,
-                                                opt.server_port );
+    printf( "  . Connecting to %s/%s/%-4d...",
+            opt.transport == SSL_TRANSPORT_STREAM ? "tcp" : "udp",
+            opt.server_addr, opt.server_port );
     fflush( stdout );
 
-    if( ( ret = net_connect( &server_fd, opt.server_addr,
-                             opt.server_port, NET_PROTO_TCP ) ) != 0 )
+    if( ( ret = net_connect( &server_fd, opt.server_addr, opt.server_port,
+                             opt.transport == SSL_TRANSPORT_STREAM ?
+                             NET_PROTO_TCP : NET_PROTO_UDP ) ) != 0 )
     {
         printf( " failed\n  ! net_connect returned -0x%x\n\n", -ret );
         goto exit;
@@ -1259,8 +1261,9 @@
             goto exit;
         }
 
-        if( ( ret = net_connect( &server_fd, opt.server_name,
-                                 opt.server_port , NET_PROTO_TCP) ) != 0 )
+        if( ( ret = net_connect( &server_fd, opt.server_name, opt.server_port,
+                                 opt.transport == SSL_TRANSPORT_STREAM ?
+                                 NET_PROTO_TCP : NET_PROTO_UDP ) ) != 0 )
         {
             printf( " failed\n  ! net_connect returned -0x%x\n\n", -ret );
             goto exit;
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index 51a4213..78b5d20 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -1242,11 +1242,15 @@
     /*
      * 2. Setup the listening TCP socket
      */
-    printf( "  . Bind on tcp://localhost:%-4d/ ...", opt.server_port );
+    printf( "  . Bind on %s://%s:%-4d/ ...",
+            opt.transport == SSL_TRANSPORT_STREAM ? "tcp" : "udp",
+            opt.server_addr ? opt.server_addr : "*",
+            opt.server_port );
     fflush( stdout );
 
-    if( ( ret = net_bind( &listen_fd, opt.server_addr,
-                                      opt.server_port, NET_PROTO_TCP ) ) != 0 )
+    if( ( ret = net_bind( &listen_fd, opt.server_addr, opt.server_port,
+                          opt.transport == SSL_TRANSPORT_STREAM ?
+                          NET_PROTO_TCP : NET_PROTO_UDP ) ) != 0 )
     {
         printf( " failed\n  ! net_bind returned -0x%x\n\n", -ret );
         goto exit;
@@ -1435,8 +1439,33 @@
 #endif
 
     if( client_fd != -1 )
+    {
         net_close( client_fd );
 
+        /*
+         * With UDP, client_fd == bind_fd, so we just closed bind_fd. Bind it
+         * again. (We really want to close it, to empty the message queue.)
+         */
+#if defined(POLARSSL_SSL_PROTO_DTLS)
+        if( opt.transport == SSL_TRANSPORT_DATAGRAM )
+        {
+            printf( "  . Bind on udp://%s:%-4d/ ...",
+                    opt.server_addr ? opt.server_addr : "*",
+                    opt.server_port );
+            fflush( stdout );
+
+            if( ( ret = net_bind( &listen_fd, opt.server_addr, opt.server_port,
+                                  NET_PROTO_UDP ) ) != 0 )
+            {
+                printf( " failed\n  ! net_bind returned -0x%x\n\n", -ret );
+                goto exit;
+            }
+
+            printf( " ok\n" );
+        }
+#endif /* POLARSSL_SSL_PROTO_DTLS */
+    }
+
     ssl_session_reset( &ssl );
 
     /*