Added mbedtls_net_close and use it in ssl_fork_server to correctly

disassociate the client socket from the parent process and the server
socket from the child process.
This commit is contained in:
Robert Larsen 2019-08-23 10:55:47 +02:00
parent beec142010
commit df8e511381
3 changed files with 22 additions and 1 deletions

View file

@ -257,6 +257,13 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len );
int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len,
uint32_t timeout ); uint32_t timeout );
/**
* \brief Closes down the connection and free associated data
*
* \param ctx The context to close
*/
void mbedtls_net_close( mbedtls_net_context *ctx );
/** /**
* \brief Gracefully shutdown the connection and free associated data * \brief Gracefully shutdown the connection and free associated data
* *

View file

@ -651,6 +651,19 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
return( ret ); return( ret );
} }
/*
* Close the connection
*/
void mbedtls_net_close( mbedtls_net_context *ctx )
{
if( ctx->fd == -1 )
return;
close( ctx->fd );
ctx->fd = -1;
}
/* /*
* Gracefully close the connection * Gracefully close the connection
*/ */

View file

@ -254,6 +254,7 @@ int main( void )
if( pid != 0 ) if( pid != 0 )
{ {
mbedtls_printf( " ok\n" ); mbedtls_printf( " ok\n" );
mbedtls_net_close( &client_fd );
if( ( ret = mbedtls_ctr_drbg_reseed( &ctr_drbg, if( ( ret = mbedtls_ctr_drbg_reseed( &ctr_drbg,
(const unsigned char *) "parent", (const unsigned char *) "parent",
@ -266,7 +267,7 @@ int main( void )
continue; continue;
} }
mbedtls_net_init( &listen_fd ); mbedtls_net_close( &listen_fd );
pid = getpid(); pid = getpid();