Как устранить неполадки: Socket.Poll возвращает false? - PullRequest
2 голосов
/ 19 марта 2012

решено Я решил проблему с отключением брандмауэра Windows

Я запускаю один и тот же код на двух разных компьютерах.

s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
ipep = new IPEndPoint(IPAddress.Any, int.Parse(mcastPort));
s.Bind(ipep);

// setting options
// ................
// s.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddSourceMembership, option);

if (s.Poll(1, SelectMode.SelectRead))
{
    Console.WriteLine("Poll returned true");
} else
{
    Console.WriteLine("Poll returned false");
}

На одном компьютере работает кодхорошо, так что, по крайней мере, некоторые это работает.Однако на другом компьютере это не работает.В одном случае Poll возвращает значение true, а в другом случае Poll возвращает значение false;Я использовал Wireshark, чтобы проверить, что на обоих компьютерах я могу видеть дейтаграммы по указанному соединению (mcastGroup, mcastPort, sourceIp).Я думал, что, вероятно, на втором компьютере используется неправильный интерфейс, поэтому я заменил new IPEndPoint(IPAddress.Any... на new IPEndPoint(IPAddress.Parse("10.11.12.13")..., но это не помогает.

Единственное отличие, которое я вижу.На компьютере, где работает программа, я могу видеть дейтаграммы только при запуске программы.На компьютере, где программа не работает, я всегда вижу дейтаграммы, даже если приложение выключено.

Вопрос в том, как мне устранить проблему?

  • Я уверен, чтов сети есть дейтаграммы, потому что я вижу их в wireshark
  • я уверен, что мое приложение и wireshark используют одну и ту же multicastGroup, multicastPort, sourceIp
  • я уверентот же интерфейс, потому что я предоставляю его явно

Но Socket.Poll по-прежнему возвращает false.Что еще мне делать?

upd Также я заметил в сниффере, что неработающий компьютер использует IGMP v2, а работающий компьютер использует IGMP V3.Возможно, функция AddSourceMembership является новой для IGMP v3, и поэтому моя программа не работает?Как заставить компьютер использовать IGMP v3?

upd Я создал другой вопрос https://stackoverflow.com/questions/9775405/the-same-udp-multicast-addsourcemembership-code-results-in-completely-different, потому что я думаю, что это не проблема c # или .net

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...