Important changes to forums and questions
All forums and questions are now archived. To start a new conversation or read the latest updates go to forums.mbed.com.
7 years, 1 month ago.
Why does ssl_server.c go to exit instead of reset if mbedtls_net_accept fails?
An example program using mbedTLS can be found in the official repository, here: https://github.com/ARMmbed/mbedtls/blob/development/programs/ssl/ssl_server.c
I am confused about why the program goes to "exit" instead of "reset" if `mbedtls_net_accept` fails.
Here are 2 snippets of the code. The first snippet is code from right after the reset goto point.
code around reset goto statement
reset:
#ifdef MBEDTLS_ERROR_C
if( ret != 0 )
{
char error_buf[100];
mbedtls_strerror( ret, error_buf, 100 );
mbedtls_printf("Last error was: %d - %s\n\n", ret, error_buf );
}
#endif
mbedtls_net_free( &client_fd );
mbedtls_ssl_session_reset( &ssl );
/*
* 3. Wait until a client connects
*/
mbedtls_printf( " . Waiting for a remote connection ..." );
fflush( stdout );
if( ( ret = mbedtls_net_accept( &listen_fd, &client_fd,
NULL, 0, NULL ) ) != 0 )
{
mbedtls_printf( " failed\n ! mbedtls_net_accept returned %d\n\n", ret );
goto exit;
}
mbedtls_ssl_set_bio( &ssl, &client_fd, mbedtls_net_send, mbedtls_net_recv, NULL );
mbedtls_printf( " ok\n" );
/*
* 5. Handshake
*/
//Code continues on...
The second snippet is the code right after the exit goto point.
code after exit goto point
exit:
mbedtls_printf("Exiting...");
#ifdef MBEDTLS_ERROR_C
if (ret != 0)
{
char error_buf[100];
mbedtls_strerror(ret, error_buf, 100);
mbedtls_printf("Last error was: %d - %s\n\n", ret, error_buf);
}
#endif
mbedtls_net_free_ocall(&client_fd);
mbedtls_net_free_ocall(&listen_fd);
mbedtls_x509_crt_free(&srvcert);
mbedtls_pk_free(&pkey);
mbedtls_ssl_free(&ssl);
mbedtls_ssl_config_free(&conf);
mbedtls_ctr_drbg_free(&ctr_drbg);
mbedtls_entropy_free(&entropy);
return (ret);
}