From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1F4fTt-0002et-8U for qemu-devel@nongnu.org; Thu, 02 Feb 2006 09:30:41 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1F4fA0-0005KW-LO for qemu-devel@nongnu.org; Thu, 02 Feb 2006 09:10:11 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1F4f3h-000412-Av for qemu-devel@nongnu.org; Thu, 02 Feb 2006 09:03:37 -0500 Received: from [199.232.41.67] (helo=mx20.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1F4f2X-0000re-77 for qemu-devel@nongnu.org; Thu, 02 Feb 2006 09:02:25 -0500 Received: from [211.5.2.77] (helo=nm01omta017.dion.ne.jp) by mx20.gnu.org with smtp (Exim 4.52) id 1F4bLH-00053e-Jt for qemu-devel@nongnu.org; Thu, 02 Feb 2006 05:05:31 -0500 Message-ID: <000a01c627df$fc48d660$0464a8c0@athlon> From: "Kazu" References: <000c01c62638$d55e7800$0464a8c0@athlon> <43E13FEC.7050804@bellard.org> Subject: Re: [Qemu-devel][PATCH] Tap and VLAN socket support for win32 Date: Thu, 2 Feb 2006 19:03:58 +0900 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0007_01C6282B.6BE1E930" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. ------=_NextPart_000_0007_01C6282B.6BE1E930 Content-Type: text/plain; format=flowed; charset="iso-8859-1"; reply-type=original Content-Transfer-Encoding: 7bit Thursday, February 02, 2006 8:10 AM Fabrice Bellard wrote: > Hi, > > I merged your patches and I made important changes to simplify them. I > did not do any tests so tell me if you see problems. > -net socket,connect doesn't work. On Windows host, connect returns with err = WSAEWOULDBLOCK and second time err = WSAEINVAL. I think changing the place of EWOULDBLOCK would be good. On Linux host, EWOULDBLOCK is the same as EAGAIN but a patch works on both Linux and Windows. For -net socket,mcast, bind have to be done by sin_addr.s_addr = INADDR_ANY. It seems that it works on Linux host. Regards, Kazu Index: vl.c =================================================================== RCS file: /sources/qemu/qemu/vl.c,v retrieving revision 1.160 diff -u -r1.160 vl.c --- vl.c 1 Feb 2006 23:06:55 -0000 1.160 +++ vl.c 2 Feb 2006 09:28:19 -0000 @@ -2335,7 +2335,13 @@ goto fail; } - ret = bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr)); + struct sockaddr_in addr; + memset(&addr, 0, sizeof(addr)); + addr.sin_family = AF_INET; + addr.sin_port = mcastaddr->sin_port; + addr.sin_addr.s_addr = INADDR_ANY; + + ret = bind(fd, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { perror("bind"); goto fail; @@ -2561,8 +2567,8 @@ ret = connect(fd, (struct sockaddr *)&saddr, sizeof(saddr)); if (ret < 0) { err = socket_error(); - if (err == EINTR || err == EWOULDBLOCK) { - } else if (err == EINPROGRESS) { + if (err == EINTR) { + } else if (err == EINPROGRESS || err == EWOULDBLOCK) { break; } else { perror("connect"); ------=_NextPart_000_0007_01C6282B.6BE1E930 Content-Type: application/octet-stream; name="qemu-20060202-vlan.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="qemu-20060202-vlan.patch" Index: vl.c=0A= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=0A= RCS file: /sources/qemu/qemu/vl.c,v=0A= retrieving revision 1.160=0A= diff -u -r1.160 vl.c=0A= --- vl.c 1 Feb 2006 23:06:55 -0000 1.160=0A= +++ vl.c 2 Feb 2006 09:28:19 -0000=0A= @@ -2335,7 +2335,13 @@=0A= goto fail;=0A= }=0A= =0A= - ret =3D bind(fd, (struct sockaddr *)mcastaddr, sizeof(*mcastaddr));=0A= + struct sockaddr_in addr;=0A= + memset(&addr, 0, sizeof(addr));=0A= + addr.sin_family =3D AF_INET;=0A= + addr.sin_port =3D mcastaddr->sin_port;=0A= + addr.sin_addr.s_addr =3D INADDR_ANY;=0A= +=0A= + ret =3D bind(fd, (struct sockaddr *)&addr, sizeof(addr));=0A= if (ret < 0) {=0A= perror("bind");=0A= goto fail;=0A= @@ -2561,8 +2567,8 @@=0A= ret =3D connect(fd, (struct sockaddr *)&saddr, sizeof(saddr));=0A= if (ret < 0) {=0A= err =3D socket_error();=0A= - if (err =3D=3D EINTR || err =3D=3D EWOULDBLOCK) {=0A= - } else if (err =3D=3D EINPROGRESS) {=0A= + if (err =3D=3D EINTR) {=0A= + } else if (err =3D=3D EINPROGRESS || err =3D=3D = EWOULDBLOCK) {=0A= break;=0A= } else {=0A= perror("connect");=0A= ------=_NextPart_000_0007_01C6282B.6BE1E930--