[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel][PATCH] Tap and VLAN socket support for win32
From: |
Kazu |
Subject: |
Re: [Qemu-devel][PATCH] Tap and VLAN socket support for win32 |
Date: |
Thu, 2 Feb 2006 19:03:58 +0900 |
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");
qemu-20060202-vlan.patch
Description: Binary data