return false не возвращается из функции

0

А реализую обертку tcp-connection C++ для робота на базе ARM, работающего под Linux.
Вот мой код:

bool tcp_connection::wait_connection(int port)
{
  is_server = true;

  if (!create_socket())
    return false;

  local_addr.sin_port = htons(port);
  const int result = bind(sockfd, (struct sockaddr *) &local_addr, sizeof(local_addr));
  if (result < 0)
  {
    std::cout << "tcp_connection.cpp: Error on binding '" << strerror(errno) << "'" << std::endl;
    std::cout << "return false" << std::endl;
    return false;
    std::cout << "after return false???" << std::endl;
  }

  std::cout << "listening...." << std::endl;
  .....
  return true;
}

Вот мой вывод:

tcp_connection.cpp: Error on binding 'Address already in use'
return false
listening....

Как это могло случиться?

  • 6
    Возможно ли, что функция вызывается дважды, и result>=0 во второй раз?
  • 1
    Это возвращение точно, поэтому нет «после возврата ложного?» линия. Но «прослушивание ...» должно исходить от другого вызова функции, проверьте оставшуюся часть кода.
Теги:
network-programming

1 ответ

2
Лучший ответ

Он возвращается. Если бы это было не так, то ваш результат:

tcp_connection.cpp: Error on binding 'Address already in use'
return false
after return false???
listening....

Вероятно, что listening... print происходит от последующего вызова wait_connection() где ветвь if (result < 0) не выполняется.

  • 0
    Ты прав. Это удалось во втором цикле. Я извиняюсь за трату вашего времени!
  • 1
    Не беспокойся об этом. Это законный вопрос, и вы сделали все возможное, чтобы сузить его.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню