Actually use UDP for DTLS in test client/server
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 );
/*