Сокету UDP не удается получить сообщение ECONNREFUSED - PullRequest
1 голос
/ 23 апреля 2011

Я создал сокет, используя: socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP).

В соответствии с это , если я отправляю простой пакет несколько раз (умножьте send () и / или sendto()), Я могу получить ECONNREFUSED.ICMP должен сказать, что предыдущий пакет не прибыл, и должен появиться ECONNREFUSED.Но происходит сбой, errno не сообщает о каких-либо ошибках, а send () всегда возвращает количество отправленных байтов.

Протокол UDP фактически не должен сообщать, что пакет был отправлен.Но ICMP может дать совет, как я понимаю.

Итак, вопрос в том - почему он не получает ECONNREFUSED?

Все делается с помощью Winsock.

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Для этого может быть две причины.

  • Целевой компьютер (по какой-то причине) не отправляет ICMP назад
  • Целевые машины делает отправить ICMP назад, но winsock неправильно интерпретирует его (я знаю, что некоторые старые Unix-ы это делали)

Короче говоря, ваша лучшая ставка для выяснения этого вопроса - использоватьперехватчик.Попробуйте wireshark и посмотрите, получите ли вы ICMP обратно.

0 голосов
/ 24 мая 2012
...