Я использую 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;
}