Merge remote-tracking branch 'origin/pr/2803' into development

* origin/pr/2803:
  Add a ChangeLog entry for mbedtls_net_close()
  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:
Jaeden Amero 2019-09-03 16:41:51 +01:00
commit 8dd6bc7ac4
4 changed files with 26 additions and 1 deletions

View file

@ -18,6 +18,10 @@ Features
verified and significantly faster, but is only supported on x86 platforms
(32-bit and 64-bit) using GCC, Clang or Visual Studio. Contributed by
Christoph Wintersteiger from Microsoft Research.
* Add mbedtls_net_close(), enabling the building of forking servers where
the parent process closes the client socket and continue accepting, and
the child process closes the listening socket and handles the client
socket. Contributed by Robert Larsen in #2803.
API Changes
* Add DER-encoded test CRTs to library/certs.c, allowing

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,
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
*

View file

@ -651,6 +651,19 @@ int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
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
*/

View file

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