Hi On Wed, Aug 24, 2022 at 3:44 PM Bin Meng <bmeng...@gmail.com> wrote:
> From: Bin Meng <bin.m...@windriver.com> > > Some qtest cases don't get response from the the QEMU executable > "the the" > under test in time on Windows. It turns out that the socket receive > call got timeout before it receive the complete response. > > The timeout value is supposed to be set to 50 seconds via the > setsockopt() call, but there is a difference among platforms. > The timeout unit of blocking receive calls is measured in > seconds on non-Windows platforms but milliseconds on Windows. > Ahah, interesting :) Well, it's not the only difference, windows uses DWORD instead of timeval > > Signed-off-by: Bin Meng <bin.m...@windriver.com> > Reviewed-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > > tests/qtest/libqtest.c | 11 ++++++++++- > 1 file changed, 10 insertions(+), 1 deletion(-) > > diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c > index 918f4657ed..7b41971347 100644 > --- a/tests/qtest/libqtest.c > +++ b/tests/qtest/libqtest.c > @@ -36,13 +36,14 @@ > #include "qapi/qmp/qstring.h" > > #define MAX_IRQ 256 > -#define SOCKET_TIMEOUT 50 > > #ifndef _WIN32 > +# define SOCKET_TIMEOUT 50 > # define CMD_EXEC "exec " > # define DEV_STDERR "/dev/fd/2" > # define DEV_NULL "/dev/null" > #else > +# define SOCKET_TIMEOUT 50000 > # define CMD_EXEC "" > # define DEV_STDERR "2" > # define DEV_NULL "nul" > @@ -108,8 +109,16 @@ static int socket_accept(int sock) > struct sockaddr_un addr; > socklen_t addrlen; > int ret; > + /* > + * timeout unit of blocking receive calls is different among platfoms. > + * It's in seconds on non-Windows platforms but milliseconds on > Windows. > + */ > +#ifndef _WIN32 > struct timeval timeout = { .tv_sec = SOCKET_TIMEOUT, > .tv_usec = 0 }; > +#else > + DWORD timeout = SOCKET_TIMEOUT; > +#endif > > if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, > (void *)&timeout, sizeof(timeout))) { > -- > 2.34.1 > > > -- Marc-André Lureau