Как исправить зависание sctp_sendmsg на недоступном хосте - PullRequest
0 голосов
/ 15 мая 2019

Я использую Linux SCTP через lksctp-tools (CentOS 7.3, lksctp-tools-1.0.17-2.el7.x86_64) в своем C-приложении. Как избежать зависания функции sctp_sendmsg(), когда она используется для установления новой ассоциации SCTP с недоступным хостом назначения.

Когда sctp_sendmsg() запускается из кода C для установления новой ассоциации SCTP с хостом dest, который недоступен, то он зависает на несколько минут, и в wireshark я вижу, что Linux отправляет повторные попытки SCTP INIT. Как избежать этого зависания? Можно ли настроить какое-то время ожидания (например, 1 секунда), которое будет прерывать sctp_sendmsg(), или это возможно как-то быстро проверить, что место назначения живо (я не хочу следовать пути ICMP req-resp)

Настроенные параметры TTL и флаги не помогли решить эту проблему.

const uint32_t ttl = 1000; //ms
rc = sctp_sendmsg(sctp_socket->fd, data.s, data.len, (struct sockaddr*)&sin, sizeof(sin), htonl(ppid), 0, 0, ttl, 0);
if (rc < 0) {
    printf("Could not connect: %s\n", strerror(errno));
    return 0;
}
...