Какие функции можно использовать для отправки данных SCTP и как они отличаются?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Какие функции можно использовать для отправки данных SCTP и как они отличаются?

Сообщение Anonymous »

Похоже, есть очень много функций, которые могут отправлять данные SCTP на Linux, включая общие функции, такие как Send () и write () , но также SCTP_SEND и sctp_sendmsg . Последний включает некоторые «специальные функции SCTP». Но сколько существует разных функций, и как они отличаются?

Код: Выделить всё

    int flags = 0;
sctp_sndrcvinfo zeroed { 0 };
struct {
uint32_t frame_nr;
uint16_t sample_rate;
uint16_t num_samples;
uint8_t samples[1500];
} buffer;
int result = sctp_recvmsg(sock,
&buffer, sizeof(buffer), // Actual data
nullptr, 0, // We don't care about the sender
&zeroed, // SCTP Metadata
&flags); // Must be zero before call
< /code>
Это успешно получает сообщения от устройства с закрытым исходным кодом. Я пытаюсь создать симулятор, который отправляет тот же тип сообщений SCTP. Я могу успешно подключить гнездо, но после этого передача данных не удается. < /P>
#include 

#include 
#include 
#include 
#include 
#include 
#include 

struct {
uint32_t frame_nr;
uint16_t sample_rate;
uint16_t num_samples;
uint8_t samples[1500];
} buffer {0};

int main()
{
// SCTP server-side setup
int ls = socket(PF_INET, SOCK_STREAM, IPPROTO_SCTP);
if (ls == -1) {
perror("failure opening listen socket");
exit(-3);
}
struct sockaddr_in serverAddress { AF_INET };
serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddress.sin_port = htons(19000);

int br = bind(ls, (struct sockaddr *)&serverAddress, sizeof(serverAddress));
if (br == -1) {
perror("bind error");
close(ls);
exit(-4);
}

// Set up 2 streams.
struct sctp_initmsg initMsg { 0 };
initMsg.sinit_num_ostreams = 2; // Matches receiver
initMsg.sinit_max_instreams = 2; // Matches receiver
initMsg.sinit_max_attempts = 0;
initMsg.sinit_max_init_timeo = 0;
setsockopt(ls, IPPROTO_SCTP, SCTP_INITMSG, &initMsg, sizeof(initMsg));

int rl = listen(ls, 1);
if(rl < 0) {
perror("failed to listen for connection");
close(ls);
exit(-5);
}

struct sockaddr_in recv_addr;
socklen_t len = sizeof(recv_addr);
int ss = accept(ls, reinterpret_cast(&recv_addr), &len);
if (ss == -1) {
perror("failed to accept connection");
close(ls);
exit(-6);
}
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79509604/which-functions-can-be-used-to-send-sctp-data-and-how-do-they-differ[/url]
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»