Как отправить сообщение в ассоциацию SCTP, найденную во время получения? - PullRequest
1 голос
/ 19 апреля 2011

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

   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 не имеет параметра идентификатора ассоциации)

1 Ответ

1 голос
/ 11 марта 2012

С http://linux.die.net/man/3/sctp_peeloff

int sctp_peeloff(int sd, sctp_assoc_t assoc_id);

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

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

...