2
我正在處理的應用程序應該能夠偵聽多個(現在4個)端口號。我需要爲每一個這些端口創建一個套接字,如:C /如何偵聽多個UDP端口
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()
聲明,這是我應該使用的東西嗎?我想聽幾個端口的原因很簡單,它應該識別我正在與之通信的應用程序。例如。每個端口一個應用程序
在此先感謝您的意見。
//更新: 我應該如何爲每個端口設置一個套接字?
您可以簡單介紹一下如何設置套接字及其對應的端口嗎?每當我嘗試爲每個端口設置一個套接字時,就會出現':Address already in use'錯誤。 – nyyrikki
它可能是你試圖綁定你的套接字已經被另一個應用程序使用的端口。有關C套接字的詳細信息和示例,請在此處查看:http://www.linuxhowtos.org/C_C++/socket.htm – fduff
設置SO_REUSEADDR對於停留在使用中的端口也有幫助 - 例如程序崩潰後。 – Walter