2

着信メッセージを UDP ソケットでリッスンする C コード スニペットがあります (正常に動作します)。

uint32_t udp_port = 101010; // example port
int sock_udp = socket(AF_INET, SOCK_DGRAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_address.sin_port = htons(udp_port);
bind(sock_udp, (struct sockaddr*) &server_address, (socklen_t) sizeof(server_address));

char buffer[20];
struct sockaddr_in sender_address;
socklen_t sender_len = (socklen_t) sizeof(struct sockaddr_in);
ssize_t rcv_len = recvfrom(sock_udp, buffer, sizeof(buffer), 0, (struct sockaddr * ) &sender_address, &sender_len);

その後、sender_address構造に送信者に関する情報があり、アドレス、ポートなどを確認できます。私の質問はrecvrecvfromまたは他の同様の機能を使用して、特定のホストからのデータグラムをリッスンできますか? 言い換えれば、他のソースからデータグラムを読み取らずにドロップすることは可能ですか?

4

1 に答える 1

1

connect(2)データグラムソケットを使用すると、指定された単一のソースからデータグラムを「フィルタリング」して受信できます。

ソケット sockfd がタイプのSOCK_DGRAM場合、 addr はデフォルトでデータグラムが送信されるアドレスであり、データグラムが受信される唯一のアドレスです。

標準的なフレーズは少し異なります。

ソケットの場合SOCK_DGRAM、ピア アドレスは後続の関数ですべてのデータグラムが送信される場所を識別し、後続の関数send()のリモート送信者を制限します。recv()

于 2013-04-07T10:27:46.213 に答える