1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-08-08 17:42:09 +03:00

Add net_recv_timeout()

This commit is contained in:
Manuel Pégourié-Gonnard
2014-09-18 11:22:45 +02:00
committed by Paul Bakker
parent 8fa6dfd560
commit 9d9b003a9a
4 changed files with 81 additions and 4 deletions

View File

@@ -583,6 +583,49 @@ int net_recv( void *ctx, unsigned char *buf, size_t len )
return( ret );
}
#if defined(POLARSSL_HAVE_TIME)
/*
* Read at most 'len' characters, blocking for at most 'timeout' seconds
*/
int net_recv_timeout( void *ctx, unsigned char *buf, size_t len,
unsigned char timeout )
{
int ret;
struct timeval tv;
fd_set read_fds;
int fd = *((int *) ctx);
FD_ZERO( &read_fds );
FD_SET( fd, &read_fds );
tv.tv_sec = timeout;
tv.tv_usec = 0;
ret = select( fd + 1, &read_fds, NULL, NULL, &tv );
/* Zero fds ready means we timed out */
if( ret == 0 )
return( POLARSSL_ERR_NET_TIMEOUT );
if( ret < 0 )
{
#if ( defined(_WIN32) || defined(_WIN32_WCE) ) && !defined(EFIX64) && \
!defined(EFI32)
if( WSAGetLastError() == WSAEINTR )
return( POLARSSL_ERR_NET_WANT_READ );
#else
if( errno == EINTR )
return( POLARSSL_ERR_NET_WANT_READ );
#endif
return( POLARSSL_ERR_NET_RECV_FAILED );
}
/* This call will not block */
return( net_recv( ctx, buf, len ) );
}
#endif /* POLARSSL_HAVE_TIME */
/*
* Write at most 'len' characters
*/