Commit f200b7a9 authored by Pavel Emelyanov's avatar Pavel Emelyanov

page-server: Start using new cr_daemon routine

After this the called of cr_page_server gets controll
back with the server's pid.
Signed-off-by: 's avatarPavel Emelyanov <xemul@parallels.com>
parent 29952618
...@@ -363,7 +363,7 @@ int main(int argc, char *argv[]) ...@@ -363,7 +363,7 @@ int main(int argc, char *argv[])
} }
if (!strcmp(argv[optind], "page-server")) if (!strcmp(argv[optind], "page-server"))
return cr_page_server(opts.restore_detach) != 0; return cr_page_server(opts.restore_detach) > 0 ? 0 : 1;
if (!strcmp(argv[optind], "service")) if (!strcmp(argv[optind], "service"))
return cr_service(opts.restore_detach); return cr_service(opts.restore_detach);
......
...@@ -246,7 +246,7 @@ static int get_sockaddr_in(struct sockaddr_in *addr) ...@@ -246,7 +246,7 @@ static int get_sockaddr_in(struct sockaddr_in *addr)
int cr_page_server(bool daemon_mode) int cr_page_server(bool daemon_mode)
{ {
int sk, ask = -1; int sk, ask = -1, ret;
struct sockaddr_in saddr, caddr; struct sockaddr_in saddr, caddr;
socklen_t clen = sizeof(caddr); socklen_t clen = sizeof(caddr);
...@@ -273,10 +273,14 @@ int cr_page_server(bool daemon_mode) ...@@ -273,10 +273,14 @@ int cr_page_server(bool daemon_mode)
goto out; goto out;
} }
if (daemon_mode) if (daemon_mode) {
if (daemon(1, 0) == -1) { ret = cr_daemon(1, 0);
if (ret == -1) {
pr_perror("Can't run in the background"); pr_perror("Can't run in the background");
return -errno; goto out;
}
if (ret > 0) /* parent task, daemon started */
return ret;
} }
if (opts.pidfile) { if (opts.pidfile) {
...@@ -286,21 +290,28 @@ int cr_page_server(bool daemon_mode) ...@@ -286,21 +290,28 @@ int cr_page_server(bool daemon_mode)
} }
} }
ask = accept(sk, (struct sockaddr *)&caddr, &clen); ret = ask = accept(sk, (struct sockaddr *)&caddr, &clen);
if (ask < 0) if (ask < 0)
pr_perror("Can't accept connection to server"); pr_perror("Can't accept connection to server");
out:
close(sk); close(sk);
if (ask < 0) if (ask >= 0) {
return -1;
pr_info("Accepted connection from %s:%u\n", pr_info("Accepted connection from %s:%u\n",
inet_ntoa(caddr.sin_addr), inet_ntoa(caddr.sin_addr),
(int)ntohs(caddr.sin_port)); (int)ntohs(caddr.sin_port));
return page_server_serve(ask); ret = page_server_serve(ask);
}
if (daemon_mode)
exit(ret);
return ret;
out:
close(sk);
return -1;
} }
static int page_server_sk = -1; static int page_server_sk = -1;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment