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 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