为什么Mac OS指定的TCP端口无法监听?

时间:2019-06-09 15:49:14

标签: c++ macos tcp port listen

我有问题。

我用C ++编写了程序,指定了端口60000。

m_pConn.sin_port = htons( 60000 );

然后,当程序(TCPFileSe)启动时,我注意到LISTENING端口不是60000。

这是我的监听端口列表。

christof-kims-Mac:~ christof-kim$ lsof -i | grep LISTEN
rapportd    639 christof-kim    3u  IPv4 0x1b8366a443833957      0t0  TCP *:49234 (LISTEN)
rapportd    639 christof-kim    4u  IPv6 0x1b8366a4437c0def      0t0  TCP *:49234 (LISTEN)
**TCPFileSe 24454 christof-kim    3u  IPv4 0x1b8366a446445957      0t0  TCP *:50087 (LISTEN)**

当我编程第二次时开始..

christof-kims-Mac:~ christof-kim$ lsof -i | grep LISTEN
rapportd    639 christof-kim    3u  IPv4 0x1b8366a443833957      0t0  TCP *:49234 (LISTEN)
rapportd    639 christof-kim    4u  IPv6 0x1b8366a4437c0def      0t0  TCP *:49234 (LISTEN)
**TCPFileSe 24647 christof-kim    3u  IPv4 0x1b8366a446445957      0t0  TCP *:50117 (LISTEN)**

我不明白为什么LISTENING端口不是60000。

您能帮我为什么LISTENING端口是50087、50117吗? 或者,不支持Mac OS指定的端口??

我需要指定的端口(例如60000)。

这段代码只是为Mac OS 10.13.6编写的语言c ++。 我已经尝试过Mac OS控制台线路工具。

sockaddr_in m_pConn;

m_pConn.sin_family = AF_INET;
m_pConn.sin_addr.s_addr = inet_addr( "0.0.0.0" );
m_pConn.sin_port = htons( 60000 );

bind(m_nSocket, (struct sockaddr *) &m_pConn, sizeof(m_pConn));
socklen_t len = sizeof(m_pConn);

// Listen on the socket.
if ( listen( m_nSocket, 1 ) == -1 )
    printf( "Error listening on socket.\n");

1 个答案:

答案 0 :(得分:0)

问题是我使用了using namespace std

//using namespace std;

因此,我添加了以下代码,然后它开始工作。

using std::ifstream;
using std::ios;

问题可能与此有关: Compiling code that uses socket function bind() with libcxx fails