1
Vote

Resolve("_workstation._tcp") Exception: Reading past end of a stream.

description

On doing a discovery of all computers in the network, I get an exception:
 
Code I used:
        Network.Bonjour.BonjourServiceResolver bsr = new Network.Bonjour.BonjourServiceResolver();
        bsr.ServiceFound += new Network.ZeroConf.ObjectEvent<Network.ZeroConf.IService>(bsr_ServiceFound); // Print name

        // http://www.dns-sd.org/ServiceTypes.html
        bsr.Resolve("_workstation._tcp");
 
 
Exception:
{"Über das Ende des Streams hinaus kann nicht gelesen werden."}
= Reading past end of a stream.
 
Stacktrace:
bei System.IO.__Error.EndOfFile()
bei System.IO.BinaryReader.ReadByte()
bei Network.Dns.DomainName.Get(BinaryReader reader)
bei Network.Dns.DomainName.Get(BinaryReader reader)
bei Network.Dns.Srv.Get(BinaryReader reader)
bei Network.Dns.ResponseData.Get(Type type, BinaryReader reader)
bei Network.Dns.Answer.Get(BinaryReader reader)
bei Network.Dns.Message.GetRequest(BinaryReader reader)
bei Network.Dns.Message.Clone()
bei Network.Bonjour.MDnsServer.OnRequestReceived(RequestEventArgs2 rea)
bei Network.Server
2.TreatUdp(RequestEventArgs2 rea, IPEndPoint client)
bei Network.Server
2.ReceiveUdpRequest(IAsyncResult result)
bei System.Net.LazyAsyncResult.Complete(IntPtr userToken)
bei System.Net.ContextAwareResult.CompleteCallback(Object state)
bei System.Threading.ExecutionContext.runTryCode(Object userData)
bei System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Net.ContextAwareResult.Complete(IntPtr userToken)
bei System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
bei System.Net.Sockets.BaseOverlappedAsyncResult.CompletionPortCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* nativeOverlapped)
bei System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32 errorCode, UInt32 numBytes, NativeOverlapped* pOVERLAP)

comments

neonp wrote Jan 20, 2011 at 5:16 AM

have you also used my library to publish your workstation ?

neonp wrote Jan 20, 2011 at 5:32 AM

I have been searching on the internet to find how to have a machine that does expose such a service, but it is actually done only on a mac, and I don't have one. Would it be possible to try to capture the frames with wireshark ? I think this happens because of a bad network frame, but since I cannot test, it would be very hard for me to correct this one.

Quandary wrote Jan 20, 2011 at 9:35 AM

No, I don't have a Mac, I use Windows + Linux.

I used this one here:
https://github.com/mono/Mono.Zeroconf/blob/master/src/MZClient/ZeroconfClient.cs

Run MZClient.exe, and it gives you a list of computers (2 Linux, 1 Windows) on my network (the 3 computers are fresh installs, nothing else than vanilla XP & Ubuntu).
No I haven't published anything with your library.

The funny thing is, this happens only when Apple's own bonjour service runs, else it returns nothing at all.
I'll try to upload the frames later.