On Thu, Jun 7, 2012 at 6:08 PM, Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> wrote: > On Wed, Jun 06, 2012 at 09:26:23PM +0800, zwu.ker...@gmail.com wrote: >> From: Zhi Yong Wu <wu...@linux.vnet.ibm.com> >> >> The -net socket,listen option does not work with the newer -netdev >> syntax: >> http://lists.gnu.org/archive/html/qemu-devel/2011-11/msg01508.html >> >> This patch makes it work now. >> >> For the case where one vlan has multiple listenning sockets, >> the patch will also provide the support. >> >> Supported syntax: >> 1.) -net socket,listen=127.0.0.1:1234,vlan=0 >> 2.) -net socket,listen=127.0.0.1:1234,vlan=0 -net >> socket,listen=127.0.0.1:1235,vlan=0 >> 3.) -netdev socket,listen=127.0.0.1:1234,id=socket0 >> >> Suggested-by: Stefan Hajnoczi <stefa...@linux.vnet.ibm.com> >> Signed-off-by: Zhi Yong Wu <wu...@linux.vnet.ibm.com> >> --- >> net.c | 24 +++++++++++ >> net.h | 3 + >> net/socket.c | 123 >> ++++++++++++++++++++++++++++++++++++++++++--------------- >> 3 files changed, 117 insertions(+), 33 deletions(-) > > Please include changelogs in new versions of patches. > > It looks like you have implemented "1 connection at a time" semantics. > This is good, I think it maps best to the netdev peer model. Allowing > multiple clients to connect to a single listen socket at the same time > doesn't fit into the netdev peer model. > > I think the patch can be simplified a lot though. There's no need to > modify net.c or add consumed booleans. > > Instead, drop the NetSocketListenState struct and add a listen_fd field > to NetSocketState. When a -netdev socket,listen= instance is created > there will be a NetSocketState with fd=-1 and a valid listen_fd. The Have you considered the case where there're mulitple -net socket,listen= instance in one vlan? > net_socket_accept() handler waits for listen_fd to become readable and > then accepts the connection. When this state transition happens, we no > longer monitor listen_fd for incoming connections...until the client > disconnects again. > > This approach doesn't need to change net.c or VLANClientState. It also > makes memory allocation simpler because we only have 1 struct: > NetSocketState. > > Stefan >
-- Regards, Zhi Yong Wu