1 /* $Id: dedicated.cpp 26098 2013-11-25 09:20:35Z rubidium $ */
4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
10 /** @file dedicated.cpp Forking support for dedicated servers. */
16 char *_log_file
= nullptr; ///< File to reroute output of a forked OpenTTD to
17 FILE *_log_fd
= nullptr; ///< File to reroute output of a forked OpenTTD to
19 #if defined(UNIX) && !defined(__MORPHOS__)
23 #include "safeguards.h"
25 #if (defined(SUNOS) && !defined(_LP64) && !defined(_I32LPx)) || defined(__HAIKU__)
26 /* Solaris has, in certain situation, pid_t defined as long, while in other
27 * cases it has it defined as int... this handles all cases nicely.
28 * Haiku has also defined pid_t as a long.
30 # define PRINTF_PID_T "%ld"
32 # define PRINTF_PID_T "%d"
37 /* Fork the program */
41 perror("Unable to fork");
44 case 0: { // We're the child
45 /* Open the log-file to log all stuff too */
46 _log_fd
= fopen(_log_file
, "a");
47 if (_log_fd
== nullptr) {
48 perror("Unable to open logfile");
51 /* Redirect stdout and stderr to log-file */
52 if (dup2(fileno(_log_fd
), fileno(stdout
)) == -1) {
53 perror("Rerouting stdout");
56 if (dup2(fileno(_log_fd
), fileno(stderr
)) == -1) {
57 perror("Rerouting stderr");
64 /* We're the parent */
65 printf("Loading dedicated server...\n");
66 printf(" - Forked to background with pid " PRINTF_PID_T
"\n", pid
);
74 /** Empty helper function call for NOT(UNIX and not MORPHOS) systems */
75 void DedicatedFork() {}
77 #endif /* ENABLE_NETWORK */