rendered paste body===================================================================
--- src/Mono.Zeroconf.Providers.Avahi/Mono.Zeroconf.Providers.Avahi/ResolvableService.cs (Revision 98696)
+++ src/Mono.Zeroconf.Providers.Avahi/Mono.Zeroconf.Providers.Avahi/ResolvableService.cs (Arbeitskopie)
@@ -73,6 +73,7 @@
IPHostEntry host_entry = new IPHostEntry();
host_entry.AddressList = new IPAddress[1];
host_entry.AddressList[0] = service.Address;
+ host_entry.AddressList[0].ScopeId = service.NetworkInterface;
host_entry.HostName = service.HostName;
return host_entry;
}
Index: src/Mono.Zeroconf.Providers.Bonjour/Mono.Zeroconf.Providers.Bonjour/BrowseService.cs
===================================================================
--- src/Mono.Zeroconf.Providers.Bonjour/Mono.Zeroconf.Providers.Bonjour/BrowseService.cs (Revision 98696)
+++ src/Mono.Zeroconf.Providers.Bonjour/Mono.Zeroconf.Providers.Bonjour/BrowseService.cs (Arbeitskopie)
@@ -125,18 +125,15 @@
{
switch(rrtype) {
case ServiceType.A:
- if(rdlen != 4) {
+ if(rdlen != 4 && rdlen != 16) {
break;
}
-
- // ~4.5 times faster than Marshal.Copy into byte[4]
- uint address_raw = (uint)(Marshal.ReadByte (rdata, 3) << 24);
- address_raw |= (uint)(Marshal.ReadByte (rdata, 2) << 16);
- address_raw |= (uint)(Marshal.ReadByte (rdata, 1) << 8);
- address_raw |= (uint)Marshal.ReadByte (rdata, 0);
- IPAddress address = new IPAddress(address_raw);
+ byte[] address_raw = new byte[rdlen];
+ Marshal.Copy (rdata, address_raw, 0, rdlen);
+ IPAddress address = new IPAddress(address_raw, interfaceIndex);
+
if(hostentry == null) {
hostentry = new IPHostEntry();
hostentry.HostName = hosttarget;