É possível forçar o SCTP a enviar todos os dados completamente ordenados?
Vamos fazer esta experiência:
1) Pegue este SCTP-discard-server e este SCTP-client .
2) Deixe o cliente contar muitas vezes até 100 e enviar um byte a cada vez, respectivamente, para o servidor.
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) Deixe o servidor contar da mesma forma e compare seu número com o recebido.
printf("%d %d\n", (int)buffer[0], (int)(test));
if ((int)test != (int)buffer[0]) break;
Alguns segundos depois:
66 66
67 67
68 68
69 69
51 70
Voila!
Eu compilei isso $ gcc discard_server.c -Wall -lusrsctp
usando gcc7.3.0 em minha máquina Ubuntu 18.04 . E sim, eu já tentei desativar todos os tipos de algoritmos nagel via SCTP_NODELAY
.
O que eu perdi? Agradecemos antecipadamente por qualquer dica.
Eu descobri, que usrsctp_sendv(..)
pode falhar, se o buffer de soquete estiver cheio, por exemplo. Isso é o que aconteceu.
Tentei while(usrsctp_sendv(..) < 0)
e agora cliente e servidor contam da maneira certa.
Este artigo é coletado da Internet.
Se houver alguma infração, entre em [email protected] Delete.
deixe-me dizer algumas palavras