remote: create virNetServerServiceNewFDOrUNIX() wrapper

It's just a wrapper around NewFD and NewUNIX that selects the right
option and increments the number of used FDs.

Signed-off-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
Martin Kletzander 2014-07-15 14:37:14 +02:00
parent 8989597cd9
commit 9805256d53
3 changed files with 63 additions and 2 deletions

View File

@ -159,6 +159,7 @@ virNetServerServiceGetMaxRequests;
virNetServerServiceGetPort;
virNetServerServiceIsReadonly;
virNetServerServiceNewFD;
virNetServerServiceNewFDOrUNIX;
virNetServerServiceNewPostExecRestart;
virNetServerServiceNewTCP;
virNetServerServiceNewUNIX;

View File

@ -1,7 +1,7 @@
/*
* virnetserverservice.c: generic network RPC server service
*
* Copyright (C) 2006-2012 Red Hat, Inc.
* Copyright (C) 2006-2012, 2014 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@ -25,6 +25,8 @@
#include "virnetserverservice.h"
#include <unistd.h>
#include "viralloc.h"
#include "virerror.h"
#include "virthread.h"
@ -90,6 +92,52 @@ static void virNetServerServiceAccept(virNetSocketPtr sock,
}
virNetServerServicePtr
virNetServerServiceNewFDOrUNIX(const char *path,
mode_t mask,
gid_t grp,
int auth,
#if WITH_GNUTLS
virNetTLSContextPtr tls,
#endif
bool readonly,
size_t max_queued_clients,
size_t nrequests_client_max,
unsigned int nfds,
unsigned int *cur_fd)
{
if (*cur_fd - STDERR_FILENO > nfds) {
/*
* There are no more file descriptors to use, so we have to
* fallback to UNIX socket.
*/
return virNetServerServiceNewUNIX(path,
mask,
grp,
auth,
#if WITH_GNUTLS
tls,
#endif
readonly,
max_queued_clients,
nrequests_client_max);
} else {
/*
* There's still enough file descriptors. In this case we'll
* use the current one and increment it afterwards.
*/
return virNetServerServiceNewFD(*cur_fd++,
auth,
#if WITH_GNUTLS
tls,
#endif
readonly,
nrequests_client_max);
}
}
virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
const char *service,
int auth,

View File

@ -1,7 +1,7 @@
/*
* virnetserverservice.h: generic network RPC server service
*
* Copyright (C) 2006-2011 Red Hat, Inc.
* Copyright (C) 2006-2011, 2014 Red Hat, Inc.
* Copyright (C) 2006 Daniel P. Berrange
*
* This library is free software; you can redistribute it and/or
@ -37,6 +37,18 @@ typedef int (*virNetServerServiceDispatchFunc)(virNetServerServicePtr svc,
virNetSocketPtr sock,
void *opaque);
virNetServerServicePtr virNetServerServiceNewFDOrUNIX(const char *path,
mode_t mask,
gid_t grp,
int auth,
# if WITH_GNUTLS
virNetTLSContextPtr tls,
# endif
bool readonly,
size_t max_queued_clients,
size_t nrequests_client_max,
unsigned int nfds,
unsigned int *cur_fd);
virNetServerServicePtr virNetServerServiceNewTCP(const char *nodename,
const char *service,
int auth,