Запуск игрового сервера с++

336
03 января 2018, 19:42

Здравствуйте! Я на php написал скрипт управлением игровым сервером.

Решил под него написать сервер на c++.

Все как бы не плохо, кроме одного, когда я запускаю игровой сервер через ПУ и останавливаю свой сервер, игровой начинает висеть на порту сервера.

И что бы заново запустить сервер управления нужно убить сервер игры.

Помогите решить проблему.

Функция exec:

string exec(const char *cmd) {
    char buffer[2048];
    std::string result = "";
    FILE *pipe = popen(cmd, "r");
    if (!pipe) throw std::runtime_error("popen() failed!");
    try {
        while (!feof(pipe)) {
            if (fgets(buffer, 2048, pipe) != NULL)
                result += buffer;
        }
    } catch (...) {
        pclose(pipe);
        throw;
    }
    pclose(pipe);
    return result;
}

Запуск сервера:

server = new net::serversocket(8888);
while (true) {
   net::socket *client = server->accept();
   string readMessage = "";
   string sendMessage = "";
   client->read(readMessage);
   std::vector <std::string> command = split(readMessage, '|');
   int startI = 0;
   if (command[0] == "start") {
      int forkStartServer = fork();
      if(forkStartServer < 0){
      }else if (forkStartServer == 0){
          setsid();
          forkStartServer = fork();
          if(forkStartServer < 0){
          }else if (forkStartServer == 0){
              exec(command[1].c_str());
          }
      }
   sendMessage = "start 1";
   client->send(sendMessage);
   client->close();
   }
}

Команда ss -p: После остановки сервера управления и при запущенном игровом сервере заполнена такими записями

tcp   CLOSE-WAIT 1  0   127.0.0.1:8888   127.0.0.1:35044 users:(("gs",pid=17536,fd=13),("glinkd",pid=17535,fd=13),("gdeliveryd",pid=17526,fd=13),("gfactiond",pid=17524,fd=13),("gacd",pid=17523,fd=13),("java",pid=17521,fd=13),("gamedbd",pid=17517,fd=13),("uniquenamed",pid=17504,fd=13),("logservice",pid=17497,fd=13))
READ ALSO
Функция int main(void) уже имеет текст реализации. Код ошибки

Функция int main(void) уже имеет текст реализации. Код ошибки

Делаю одну программу для эксперимента и возникла одна ошибкаСделал новый проект и оставил ту же функцию и те же свойства, а ошибка так и осталась,...

1206
Требуется протестировать программу

Требуется протестировать программу

Требуется протестировать программуПрограмма создает шары разных цветов и передвигает их внутри допустимой области с разными скоростями

268
Программа отдаёт разные ответы в разных компиляторах

Программа отдаёт разные ответы в разных компиляторах

В онлайн компиляторе код (http://cppsh/4gnfb) при вводе:

239
Переменные захлебываются (C++)

Переменные захлебываются (C++)

Не могу понять почему переменные "захлебываются" после введения второй и тдзаписи

293