Когда вы говорите, что UDP-сокет закрывается, что именно вы имеете в виду? Вы пытаетесь send
, и это терпит неудачу?
Для SCTP: можете ли вы собирать трассировки wireshark или pcap во время выполнения этих операций ввода-вывода (предпочтительно запускать wireshark на одноранговом узле)? Я предполагаю (обоснованное предположение, не глядя на код), когда эти операции ввода / вывода входят в картину, ваш процесс истощается за время процессора. Другой конец отправляет SCTP Heartbeat messages
, на который он не получает ответов. Или, если данные передаются, одноранговый конец не получает SACKS
, поскольку они еще не были обработаны стеком SCTP на вашем конце.
Пир, следовательно, прерывает ассоциацию внутри и прекращает отправку вам данных (так как он видит все пути, так как down ergo не отправляет ABORT. В таком случае ваш стек SCTP все еще будет думать, что Ассоциация жива).
Попытайтесь подтвердить, каковы значения для Heartbeat timeout, RTO timeout,SACK timeout, maximum Path retransmission & max Association retransmission
на одноранговом конце. Я не работал с Kernel SCTP, но sysctl должен быть в состоянии дать вам эти значения.
В любом случае, сбор следов pcap, когда вы наблюдаете эту проблему, даст нам намного лучшее понимание того, что происходит не так. Надеюсь, это поможет.