spiceproxy: keep socket open on restart

This commit is contained in:
Dietmar Maurer 2015-01-01 10:43:01 +01:00
parent de72f7ee54
commit e1cc2687ef

View File

@ -61,17 +61,37 @@ sub init {
my $lockfh = IO::File->new(">>${accept_lock_fn}") ||
die "unable to open lock file '${accept_lock_fn}' - $!\n";
my $socket = IO::Socket::INET->new(
LocalAddr => undef, # all interfaces
LocalPort => 3128,
Listen => SOMAXCONN,
Proto => 'tcp',
ReuseAddr => 1) ||
die "unable to create socket - $@\n";
my ($socket, $sockfd);
# we often observe delays when using Nagle algorithm,
# so we disable that to maximize performance
setsockopt($socket, IPPROTO_TCP, TCP_NODELAY, 1);
if (defined($sockfd = $ENV{PVE_DAEMON_SOCKET_3128}) &&
$self->{env_restart_pve_daemon}) {
die "unable to parse socket fd '$sockfd'\n"
if $sockfd !~ m/^(\d+)$/;
$sockfd = $1; # untaint
$socket = IO::Socket::INET->new;
$socket->fdopen($sockfd, 'w') ||
die "cannot fdopen file descriptor '$sockfd' - $!\n";
} else {
$socket = IO::Socket::INET->new(
LocalAddr => undef, # all interfaces
LocalPort => 3128,
Listen => SOMAXCONN,
Proto => 'tcp',
ReuseAddr => 1) ||
die "unable to create socket - $@\n";
# we often observe delays when using Nagle algorithm,
# so we disable that to maximize performance
setsockopt($socket, IPPROTO_TCP, TCP_NODELAY, 1);
$ENV{PVE_DAEMON_SOCKET_3128} = $socket->fileno;
}
# remove FD_CLOEXEC bit to reuse on exec
$socket->fcntl(Fcntl::F_SETFD(), 0);
$self->{server_config} = {
base_handler_class => 'PVE::API2',