version 1.187, 2019/06/20 06:51:36 |
version 1.188, 2020/03/12 09:26:34 |
|
|
|
|
struct tmuxproc *server_proc; |
struct tmuxproc *server_proc; |
static int server_fd = -1; |
static int server_fd = -1; |
|
static int server_client_flags; |
static int server_exit; |
static int server_exit; |
static struct event server_ev_accept; |
static struct event server_ev_accept; |
|
|
|
|
|
|
/* Create server socket. */ |
/* Create server socket. */ |
static int |
static int |
server_create_socket(char **cause) |
server_create_socket(int flags, char **cause) |
{ |
{ |
struct sockaddr_un sa; |
struct sockaddr_un sa; |
size_t size; |
size_t size; |
|
|
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) |
if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) |
goto fail; |
goto fail; |
|
|
mask = umask(S_IXUSR|S_IXGRP|S_IRWXO); |
if (flags & CLIENT_DEFAULTSOCKET) |
|
mask = umask(S_IXUSR|S_IXGRP|S_IRWXO); |
|
else |
|
mask = umask(S_IXUSR|S_IRWXG|S_IRWXO); |
if (bind(fd, (struct sockaddr *)&sa, sizeof sa) == -1) { |
if (bind(fd, (struct sockaddr *)&sa, sizeof sa) == -1) { |
saved_errno = errno; |
saved_errno = errno; |
close(fd); |
close(fd); |
|
|
|
|
/* Fork new server. */ |
/* Fork new server. */ |
int |
int |
server_start(struct tmuxproc *client, struct event_base *base, int lockfd, |
server_start(struct tmuxproc *client, int flags, struct event_base *base, |
char *lockfile) |
int lockfd, char *lockfile) |
{ |
{ |
int pair[2]; |
int pair[2]; |
sigset_t set, oldset; |
sigset_t set, oldset; |
|
|
|
|
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) |
if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, pair) != 0) |
fatal("socketpair failed"); |
fatal("socketpair failed"); |
|
server_client_flags = flags; |
|
|
sigfillset(&set); |
sigfillset(&set); |
sigprocmask(SIG_BLOCK, &set, &oldset); |
sigprocmask(SIG_BLOCK, &set, &oldset); |
|
|
|
|
gettimeofday(&start_time, NULL); |
gettimeofday(&start_time, NULL); |
|
|
server_fd = server_create_socket(&cause); |
server_fd = server_create_socket(flags, &cause); |
if (server_fd != -1) |
if (server_fd != -1) |
server_update_socket(); |
server_update_socket(); |
c = server_client_create(pair[1]); |
c = server_client_create(pair[1]); |
|
|
break; |
break; |
case SIGUSR1: |
case SIGUSR1: |
event_del(&server_ev_accept); |
event_del(&server_ev_accept); |
fd = server_create_socket(NULL); |
fd = server_create_socket(server_client_flags, NULL); |
if (fd != -1) { |
if (fd != -1) { |
close(server_fd); |
close(server_fd); |
server_fd = fd; |
server_fd = fd; |