Можно ли заставить SCTP отправить все данные в полном порядке?
Давайте сделаем этот эксперимент:
1) Возьми этот SCTP-диск-сервер и SCTP-клиент .
2) Пусть клиент много раз посчитает до 100 и каждый раз отправляет байт соответственно на сервер.
for(long i=0; i< 1000000000; i++){
char temp = (char)(i%100) + 1;
usrsctp_sendv(
sock, (void *)&temp, 1,
NULL, 0, NULL, 0, SCTP_SENDV_NOINFO, 0
);
}
3) Пусть сервер считает так же и сравнивает свой номер с полученным.
printf("%d %d\n", (int)buffer[0], (int)(test));
if ((int)test != (int)buffer[0]) break;
Несколько секунд спустя:
66 66
67 67
68 68
69 69
51 70
Вуаля!
Я скомпилировал это с $ gcc discard_server.c -Wall -lusrsctp
, используя gcc7.3.0 на моей Ubuntu 18.04 машине. И да, я уже пытался отключить все виды nagel-алгоритмов через SCTP_NODELAY
.
Что я пропустил? Заранее спасибо за любую подсказку.