C/如何监听多个UDP端口

nyy*_*kki 3 c sockets

我正在开发的应用程序应该能够监听多个(现在是 4 个)端口号。我是否需要为每个端口创建一个套接字,例如:

if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
    perror("error: could not create UDP socket\n");
    exit(EXIT_FAILURE);
}

bzero(&sock_addr, sizeof(sock_addr));
sock_addr.sin_family    = AF_INET;
sock_addr.sin_port      = htons(port1);
sock_addr.sin_addr.s_addr   = inet_addr(INADDR_ANY);

if(bind(sock_fd, (struct sockaddr *) &sock_addr, sock_len) < 0) {
    perror("error: could not bind UDP socket to AU\n");
    exit(EXIT_FAILURE);
}
Run Code Online (Sandbox Code Playgroud)

或者有更优雅的方法来做到这一点吗?我还读到了该select()声明,我应该使用它吗?我想监听多个端口的原因很简单,它应该识别我正在与之通信的应用程序。例如,每个端口一个应用程序。

预先感谢您的评论。

// 更新:我应该如何为每个端口设置一个套接字?

unw*_*ind 5

是的,您需要为您希望通过其进行通信的每对(IP、端口)号提供单独的套接字。

是的,select()一旦您将多个套接字全部设置完毕,您绝对可以使用该函数(它不是一个“声明”,这意味着它是该语言的一部分,它只是库中的一个函数)来为它们提供服务。