gpt4 book ai didi

c - 为什么 UDP 套接字不接收来自 nc -u 主机端口的 udp 流量?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:29 24 4
gpt4 key购买 nike

 int main(int argc, char *argv[])
{
struct sockaddr_in src = { .sin_family=AF_INET, .sin_addr.s_addr=INADDR_ANY, .sin_port=htons(90) };

int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);

bind(fd, (struct sockaddr *)&src, sizeof(src));

char buf[1024];
ssize_t res = recvfrom(fd, buf, sizeof(buf), 0, NULL, 0);
printf("res=%zi\n", res);

return 0;
}

编译并执行该程序后。在另一个终端上我执行

nc -u localhost 90

测试我是否真的从“任何接口(interface)”接收到一些 udp 流量,因为我使用了 INADDR_ANY。但是程序只是挂起。我错过了什么?

最佳答案

端口 90 小于 1024,因此进程需要特权才能将套接字绑定(bind)到它。

你有两个选择:

  1. 选择1024以上端口
  2. 以特权运行您的程序 (sudo...)

应该考虑测试 bind() 的结果(与任何其他系统调用一样)以轻松检测此类情况。

关于c - 为什么 UDP 套接字不接收来自 nc -u 主机端口的 udp 流量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57183826/

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