[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] A question about this commit 9894dc0cdcc397ee5b26370bc53da6
From: |
Gaohaifeng (A) |
Subject: |
[Qemu-devel] A question about this commit 9894dc0cdcc397ee5b26370bc53da6d360a363c2 |
Date: |
Tue, 23 Aug 2016 08:57:44 +0000 |
Hi Daniel & Paolo,
Commit 9894dc0c "char: convert from GIOChannel to QIOChannel", about
the below code segment:
-static gboolean tcp_chr_read(GIOChannel *chan, GIOCondition cond, void *opaque)
+static gboolean tcp_chr_read(QIOChannel *chan, GIOCondition cond, void *opaque)
{
CharDriverState *chr = opaque;
TCPCharDriver *s = chr->opaque;
@@ -2938,9 +2801,7 @@ static gboolean tcp_chr_read(GIOChannel *chan,
GIOCondition cond, void *opaque)
if (len > s->max_size)
len = s->max_size;
size = tcp_chr_recv(chr, (void *)buf, len);
- if (size == 0 ||
- (size < 0 &&
- socket_error() != EAGAIN && socket_error() != EWOULDBLOCK)) {
+ if (size == 0 || size == -1) {
/* connection closed */
tcp_chr_disconnect(chr);
} else if (size > 0) {
The old version will not call tcp_chr_disconnect when error is not EAGAIN.
The new version will call tcp_chr_disconnect when size==-1. From the
tcp_chr_recv function we see EAGIN will return -1, so EAGIN will call
tcp_chr_disconnect.
We meet an issue when Guest VM use DPDK(1.6.0) l2fwd, it may exit since link
status is not up. The link is down because tcp_chr_disconnect will set it.
Can you explain it why EAGIN here changes the behavior ?
Thanks,
Haifeng Gao
- [Qemu-devel] A question about this commit 9894dc0cdcc397ee5b26370bc53da6d360a363c2,
Gaohaifeng (A) <=