C # SocketException с Multicast на XP - PullRequest
       8

C # SocketException с Multicast на XP

5 голосов
/ 12 января 2009

Следующий код C # работает правильно в Vista, но не работает в XP с:

SocketException: указан неверный аргумент.

Код ошибки 10022.

Брандмауэр в XP отключен.

using System;
using System.Net;
using System.Net.Sockets;

public class SocketTest
{
    [STAThread]
    public static void Main()
    {
        MySocket s = new MySocket();

        Console.WriteLine("done");
        Console.ReadLine();
    }

    public class MySocket : Socket
    {
        public const ushort SocketTtl = 4;
        public const string Address = "239.255.255.250";

        public IPAddress IPAddress = IPAddress.Parse(Address);

        public MySocket()
            : base(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
        {
            SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
            SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, SocketTtl);

            // This line throws SocketException: An invalid argument was supplied
            // SocketException.ErrorCode: 10022
            SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress));
        }
    }
}

Есть идеи?

1 Ответ

8 голосов
/ 12 января 2009

Вам необходимо привязать сокет к интерфейсу перед установкой параметра SocketOptionName.AddMembership.

Редактировать: только что проверил это в документах MSDN (хотя там написано только до NT4):

Windows 98, платформа Windows NT 4.0 Примечание. Перед использованием AddMembership в качестве параметра optionName необходимо вызвать метод Bind.

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