ssl_server2 aborts cleanly on SIGTERM

(while waiting for a new connection)
diff --git a/programs/ssl/ssl_server2.c b/programs/ssl/ssl_server2.c
index e58099f..a09aa3b 100644
--- a/programs/ssl/ssl_server2.c
+++ b/programs/ssl/ssl_server2.c
@@ -63,6 +63,7 @@
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
+#include <signal.h>
 
 #include "polarssl/net.h"
 #include "polarssl/ssl.h"
@@ -564,10 +565,19 @@
 }
 #endif /* POLARSSL_KEY_EXCHANGE__SOME__PSK_ENABLED */
 
+/* Interruption handler to ensure clean exit (for valgrind testing) */
+static int listen_fd;
+static int received_sigterm = 0;
+void term_handler( int sig )
+{
+    ((void) sig);
+    received_sigterm = 1;
+    net_close( listen_fd ); /* causes net_accept() to abort */
+}
+
 int main( int argc, char *argv[] )
 {
     int ret = 0, len, written, frags;
-    int listen_fd;
     int client_fd = -1;
     int version_suites[4][2];
     unsigned char buf[IO_BUF_LEN];
@@ -635,6 +645,9 @@
     memset( (void *) alpn_list, 0, sizeof( alpn_list ) );
 #endif
 
+    /* Abort cleanly on SIGTERM */
+    signal( SIGTERM, term_handler );
+
     if( argc == 0 )
     {
     usage:
@@ -1377,6 +1390,13 @@
 
     if( ( ret = net_accept( listen_fd, &client_fd, NULL ) ) != 0 )
     {
+        if( received_sigterm )
+        {
+            printf( " interrupted by SIGTERM\n" );
+            ret = 0;
+            goto exit;
+        }
+
         printf( " failed\n  ! net_accept returned -0x%x\n\n", -ret );
         goto exit;
     }