Как отправить сообщение в ассоциацию SCTP, обнаруженную во время приема?

У меня есть сокет для получения данных от нескольких клиентов.

   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); 
   }

Я получаю идентификатор ассоциации для каждого соединения. Мой вопрос заключается в том, как я могу отправить ответное сообщение по идентификатору ассоциации, а не использовать адрес клиента (например, sctp_sendmsg не имеет параметра идентификатора ассоциации)


person Sandeep    schedule 19.04.2011    source источник


Ответы (1)


Из http://linux.die.net/man/3/sctp_peeloff

int sctp_peeloff(int sd, sctp_assoc_t assoc_id);

sctp_peeloff ответвляется от существующей ассоциации assoc_id в сокете типа "один ко многим" sd в отдельный сокет. Новый сокет представляет собой сокет типа «один к одному».

Это особенно желательно, когда, например, приложение хочет, чтобы ряд спорадических отправителей/получателей сообщений оставался в исходном сокете в стиле «один ко многим», но разветвлял эти ассоциации, несущие большой объем трафика данных, в свои собственные отдельные дескрипторы сокетов. .

person user1055604    schedule 11.03.2012