On 21/07/2015 10:10, Peter Maydell wrote:
> On 21 July 2015 at 08:34, Paolo Bonzini <pbonz...@redhat.com> wrote:
>> Signed-off-by: Paolo Bonzini <pbonz...@redhat.com>
>> ---
>>  qemu-char.c | 13 +++++++++++--
>>  1 file changed, 11 insertions(+), 2 deletions(-)
>>
>> diff --git a/qemu-char.c b/qemu-char.c
>> index b2b43c5..d956f8d 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -2798,7 +2798,10 @@ static ssize_t tcp_chr_recv(CharDriverState *chr, 
>> char *buf, size_t len)
>>  #ifdef MSG_CMSG_CLOEXEC
>>      flags |= MSG_CMSG_CLOEXEC;
>>  #endif
>> -    ret = recvmsg(s->fd, &msg, flags);
>> +    do {
>> +        ret = recvmsg(s->fd, &msg, flags);
>> +    } while (ret == -1 && errno == EINTR);
>> +
>>      if (ret > 0 && s->is_unix) {
>>          unix_process_msgfd(chr, &msg);
>>      }
>> @@ -2809,7 +2812,13 @@ static ssize_t tcp_chr_recv(CharDriverState *chr, 
>> char *buf, size_t len)
>>  static ssize_t tcp_chr_recv(CharDriverState *chr, char *buf, size_t len)
>>  {
>>      TCPCharDriver *s = chr->opaque;
>> -    return qemu_recv(s->fd, buf, len, 0);
>> +    ssize_t ret;
>> +
>> +    do {
>> +        ret = qemu_recv(s->fd, buf, len, 0);
>> +    } while (ret == -1 && socket_error() == EINTR);
>> +
>> +    return ret;
>>  }
> 
> ...can you get EINTR on Windows sockets?

No idea, but WSAEINTR exists and even has some hits on Google. :)

Paolo

Reply via email to