On Thu, Jun 23, 2011 at 09:02:16PM -0600, Eric Blake wrote: > On 06/22/2011 09:33 AM, Daniel P. Berrange wrote: > > To facilitate creation of new clients using XDR RPC services, > > pull alot of the remote driver code into a set of reusable > > s/alot/a lot/ > > > objects. > > > > - virNetClient: Encapsulates a socket connection to a > > remote RPC server. Handles all the network I/O for > > reading/writing RPC messages. Delegates RPC encoding > > and decoding to the registered programs > > > > - virNetClientProgram: Handles processing and dispatch > > of RPC messages for a single RPC (program,version). > > A program can register to receive async events > > from a client > > > > - virNetClientStream: Handles generic I/O stream > > integration to RPC layer > > > > Each new client program now merely needs to define the list of > > RPC procedures & events it wants and their handlers. It does > > not need to deal with any of the network I/O functionality at > > all. > > > +++ b/src/Makefile.am > > @@ -1187,7 +1187,7 @@ else > > EXTRA_DIST += $(LOCK_DRIVER_SANLOCK_SOURCES) > > endif > > > > -noinst_LTLIBRARIES += libvirt-net-rpc.la libvirt-net-rpc-server.la > > +noinst_LTLIBRARIES += libvirt-net-rpc.la libvirt-net-rpc-server.la libvirt-net-rpc-client.la > > > > libvirt_net_rpc_la_SOURCES = \ > > rpc/virnetmessage.h rpc/virnetmessage.c \ > > @@ -1237,6 +1237,18 @@ libvirt_net_rpc_server_la_LDFLAGS = \ > > libvirt_net_rpc_server_la_LIBADD = \ > > $(CYGWIN_EXTRA_LIBADD) > > > > +libvirt_net_rpc_client_la_SOURCES = \ > > + rpc/virnetclientprogram.h rpc/virnetclientprogram.c \ > > + rpc/virnetclientstream.h rpc/virnetclientstream.c \ > > + rpc/virnetclient.h rpc/virnetclient.c > > +libvirt_net_rpc_client_la_CFLAGS = \ > > + $(AM_CFLAGS) > > +libvirt_net_rpc_client_la_LDFLAGS = \ > > + $(AM_LDFLAGS) \ > > + $(CYGWIN_EXTRA_LDFLAGS) \ > > + $(MINGW_EXTRA_LDFLAGS)l > > There's that 'l' again. Copy and paste strikes hard. :) > > > + > > +struct _virNetClientCall { > > + int mode; > > + > > + virNetMessagePtr msg; > > + int expectReply; > > bool? Yes it should be. > > > +static virNetClientPtr virNetClientNew(virNetSocketPtr sock, > > + const char *hostname) > > +{ > > + virNetClientPtr client; > > + int wakeupFD[2] = { -1, -1 }; > > + > > + if (pipe(wakeupFD) < 0) { > > pipe2(wakeupFD, O_CLOEXEC|O_NONBLOCK) Actually we only want O_CLOEXEC for this one. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list