2013-10-26 52 views
0

正在实现tcp-connection在Linux下运行的基于ARM的机器人的C++包装器。
这里是我的代码:'return false'不会从函数返回

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? – BoBTFish

+1

它肯定会返回,这就是为什么没有“返回false后?”线。但是“聆听...”必须来自另一个函数调用,请检查其余的代码。 –

回答

2

它正在返回。如果不是,你的输出将是:

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

这很可能是listening...打印是到wait_connection()的后续调用其中if (result < 0)不转移。

+0

你说得对。它在第二个循环中成功。 我很抱歉浪费你的时间! – vitperov

+1

不用担心。这是一个合理的问题,你尽力缩小范围。 – Adam