すべてのUDPパケットを読み取るアプリケーション用のカーネルスレッドを作成します。これらのパケットがポート範囲(5001〜5005など)に到達する可能性があるので、私はバインディングの問題に直面しています。UDPソケットをポート範囲にバインドする方法
これを行う方法。 ポインタ/リンクは参考になります。
すべてのUDPパケットを読み取るアプリケーション用のカーネルスレッドを作成します。これらのパケットがポート範囲(5001〜5005など)に到達する可能性があるので、私はバインディングの問題に直面しています。UDPソケットをポート範囲にバインドする方法
これを行う方法。 ポインタ/リンクは参考になります。
あなたは、複数のポートにソケットをバインド0verboseコメントで示唆されているように行うと、複数のソケットを開くほかのポート
につき1つのソケットを使用することはできません、あなたが選択()/ポールを(使用する必要があります)一度にすべてのソケットを聴くことができます。 あなたはここに、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つのソケットを開きます。それぞれのポートに1つずつ、リッスンする必要があります。 – Heisenbug