gpt4 book ai didi

linux - 套接字绑定(bind)在一个端口上,但 netstat 和 lsof 等工具显示它在其他端口上监听

转载 作者:太空宇宙 更新时间:2023-11-04 09:25:37 25 4
gpt4 key购买 nike

相关代码如下。我在端口 12345 上绑定(bind)套接字,代码完全按预期工作。它响应该端口和所有内容的请求。

但是,netstat 或 lsof 等工具几乎总是显示监听端口 14640 的进程。我对此感到困惑,最后我决定看看如果我将套接字绑定(bind)到端口 14640 会发生什么。事实证明,当它绑定(bind)到 14640 时,lsof 显示它正在监听(我不骗你)原始端口, 12345. 我来回走动,一直看到相同的结果。就好像这两个数字之间有着某种奇怪的关系。

我是不是疯了?这种行为有解释吗?

SOCKET sock, clientSock;
sockaddr_in serverAddress, clientAddress;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printff("Error opening socket\n");
return;
}

char *temp = (char *)&serverAddress;
for (int i = 0; i < sizeof(serverAddress); i++) {
temp[i] = 0;
}

serverAddress.sin_family = AF_INET;
serverAddress.sin_addr.s_addr = INADDR_ANY;
serverAddress.sin_port = port; //port = 12345

int b = bind(sock, (sockaddr*)&serverAddress, sizeof(serverAddress));
if (b != 0) {
printff("Unable to bind: %i\n", lastError());
return;
}

int res = listen(sock, SOMAXCONN);
if (res != 0) {
printff("Unable to listen: %i\n", lastError());
return;
}

socklen_t clilen = sizeof(*clientAddress);
clientSock = accept(sock, (sockaddr*)&clientAddress, &clilen);

最佳答案

serverAddress.sin_port = port; //port = 12345

应该是

serverAddress.sin_port = htons(port); //port = 12345

如几乎任何地方的任何示例所示。

It's as if these two numbers have some weird relationship with each other.

他们有。一个是另一个的字节交换值。 0x3039 和 0x3930。

关于linux - 套接字绑定(bind)在一个端口上,但 netstat 和 lsof 等工具显示它在其他端口上监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36879086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com