GNOME Bugzilla – Bug 523618
DAAP client does not work with link-local IPv6 addresses
Last modified: 2009-05-31 08:46:11 UTC
Hi, with banshee from the stable branch the DAAP client feature doesn't work at all. It seems that banshee doesn't even try to open a connection to the share (it shows them though). Using banshee as DAAP server works fine.
Backtrace when adding a Console.WriteLine :) System.Net.WebException: Error: ConnectFailure at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] at System.Net.HttpWebRequest.GetResponse () [0x00000] at DAAP.ContentFetcher.FetchResponse (System.String path, Int64 offset, System.String query, System.Net.WebHeaderCollection extraHeaders, Int32 requestId, Boolean disableKeepalive) [0x00000] at DAAP.ContentFetcher.Fetch (System.String path, System.String query, System.Net.WebHeaderCollection extraHeaders, Int32 requestId) [0x00000] at DAAP.ContentFetcher.Fetch (System.String path) [0x00000] at DAAP.Client..ctor (System.Net.IPAddress address, UInt16 port) [0x00000] at DAAP.Client..ctor (DAAP.Service service) [0x00000] at Banshee.Plugins.Daap.DaapSource+<>c__CompilerGenerated1.<Activate>c__15 () [0x00000] System.Net.WebException: Error: ConnectFailure at System.Net.HttpWebRequest.EndGetResponse (IAsyncResult asyncResult) [0x00000] at System.Net.HttpWebRequest.GetResponse () [0x00000] at DAAP.ContentFetcher.FetchResponse (System.String path, Int64 offset, System.String query, System.Net.WebHeaderCollection extraHeaders, Int32 requestId, Boolean disableKeepalive) [0x00000] at DAAP.ContentFetcher.Fetch (System.String path, System.String query, System.Net.WebHeaderCollection extraHeaders, Int32 requestId) [0x00000] at DAAP.ContentFetcher.Fetch (System.String path) [0x00000] at DAAP.Client..ctor (System.Net.IPAddress address, UInt16 port) [0x00000] at DAAP.Client..ctor (DAAP.Service service) [0x00000] at Banshee.Plugins.Daap.DaapSource+<>c__CompilerGenerated1.<Activate>c__15 ()
Ok, this is caused by the fact, that the shares all exist as IPv4 and IPv6 variant. For some reason the IPv6 variant is sometimes prefered and then things fail because I have no IPv6 network. So it should either test all adresses that are given for a service or prefer IPv4 over IPv6...
Ok, the problem is clear now. My IPv6 address is a link local address for which one needs to set the interface & the IP to do something useful. So this is what should be done now: Both, Bonjour and Avahi, give the interface index for their services. This should be exposed by Mono.Zeroconf at some place. Then we need to create a connection where this interface index is used. It seems to be impossible with System.Net.HttpWebRequest but System.Net.Sockets.Socket seems to have a way: System.Net.Sockets.SocketOptionName.MulticastInterface.
Ok, the part in Mono.Zeroconf should be fixed now... left is: https://bugzilla.novell.com/show_bug.cgi?id=372840
Sebastian is this still a problem in 1.4?
Closing as OBSOLETE. Feel free to re-open if you are still seeing this issue.