我想爲將讀取所有UDP數據包的應用程序編寫內核線程。由於這些數據包可以到達端口範圍(比如5001到5005),所以我在綁定時遇到問題。如何將UDP套接字綁定到一系列端口
如何做到這一點。 任何指針/鏈接都會有幫助。
我想爲將讀取所有UDP數據包的應用程序編寫內核線程。由於這些數據包可以到達端口範圍(比如5001到5005),所以我在綁定時遇到問題。如何將UDP套接字綁定到一系列端口
如何做到這一點。 任何指針/鏈接都會有幫助。
您不能綁定一個套接字多個端口,請執行0verbose在評論建議,並使用每個端口
一個插座除了打開多個插座,則需要使用select()/ poll()將立即收聽所有的套接字。 如果你是Linux下編程的C/C++,這裏是一個僞代碼在C:
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
...
int main()
{
fd_set afds;
fd_set rfds;
int maxfd = -1;
int fd, ret;
/* initialize fdsets */
FD_ZERO(&afds);
/* create a socket per port */
foreach (port p) {
fd = create_udp_socket(p); /* also bind to port p */
if (fd < 0) error_exit("error: socket()\n");
FD_SET(fd, &afds);
if (fd > maxfd) maxfd = fd;
}
while (1) {
memcpy(&rfds, &afds, sizeof(rfds));
/* wait for a packet from any port */
ret = select(maxfd + 1, &rfds, NULL, NULL, NULL);
if (ret < 0) error_exit("error: select()\n");
/* which socket that i received the packet */
for (fd=0; fd<=maxfd; ++fd)
if (FD_ISSET(fd, &rfds))
process_packet(fd); /* read the packet from socket fd */
}
}
希望這個代碼將會幫助你在你使用
什麼編程語言? –
打開5個插座,每個端口需要聽一個。 – Heisenbug