我正在处理的应用程序应该能够收听多个(现在是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);
}
或者有更优雅的方式吗?我还读到了select()
声明,这应该是我应该使用的吗?我想在几个端口上监听的原因很简单,它应该识别我正在与之通信的应用程序。例如。每个端口一个应用程序。
提前感谢您的意见。
//更新: 我应该如何为每个端口设置一个插槽?
答案 0 :(得分:4)
是的,您需要为要通过的每对(IP,端口)号码分别设置套接字。
是的,你绝对可以使用select()
函数(它不是一个“声明”,暗示在某种程度上是语言的一部分,它只是库中的一个函数)来为你的多个套接字提供服务把它们全部搞定。