2

複数のクライアントからデータを受信するためのソケットがあります。

   sockfd = socket(...); 
   bind(sockfd, ...); 
   listen(sockfd, ...); 
   while (true) { 
    nread = sctp_rcvmsg(sockfd, ..., buf, ..., &info); 
    assoc_id = sinfo.sinfo_assoc_id; 
    stream = sinfo.sinfo_stream; 
    handle_message(assoc_id, stream, buf, nread); 
   }

各接続の関連付け ID を取得します。私の質問は、クライアント アドレスを使用するのではなく、アソシエーション ID で応答メッセージを送信する方法です (たとえば、sctp_sendmsg にはアソシエーション ID パラメータがありません)。

4

1 に答える 1

2

http://linux.die.net/man/3/sctp_peeloffから

int sctp_peeloff(int sd, sctp_assoc_t assoc_id);

sctp_peeloffassoc_id1 対多スタイルのソケットの既存の関連付けを別のソケットに分岐しsdます。新しいソケットは、1 対 1 のスタイルのソケットです。

これは、たとえば、アプリケーションが多数の散発的なメッセージ送信者/受信者を元の 1 対多スタイルのソケットの下に残したいが、大量のデータ トラフィックを運ぶこれらの関連付けを独自の個別のソケット記述子に分岐させたい場合に特に望ましいです。 .

于 2012-03-11T14:27:29.907 に答える