Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- From: "Paul G. Tobey [eMVP]" <ptobey no spam AT no instrument no spam DOT com>
- Date: Thu, 5 May 2005 08:17:40 -0700
I doubt that it's a 'bug', although it might be something which is
unsupported. Can you send a smaller example that shows the problem. Bits
and pieces of code aren't really helpful in this situation.
You're saying that the Windows CE device connects to the server or the
server connects to the Windows CE device with a stream socket? The Windows
CE device then opens a datagram socket and receives data from the server?
Remember that ReceiveFrom() doesn't prevent you from receiving from other
hosts; it just returns which host the packet came from. What is the network
physical layer here? Ethernet? Wireless Ethernet?
Paul T.
"Stressed Out Developer" <StressedOutDeveloper@xxxxxxxxxxxxxxxxxxxxxxxxx>
wrote in message news:E0D2D9A8-E06A-4F68-9E9F-24D7AFC0BC07@xxxxxxxxxxxxxxxx
>I have an application that we are porting from Unmanaged C++ to VB.NET
> that involves sockets. There are two pieces to the code. One piece is
> a one to one TCP call to a server which is working fine. The second
> piece receives streaming data from the server on a regular basis via
> UDP. My problem is that I can not make the ReceiveFrom call work.
> This code is multithreaded and I don't know if that has any bearing on
> it or not.
>
> First off, I make a call to the function "OpenStreaming" which does the
> following:
>
> m_StreamSocket = New Socket(AddressFamily.InterNetwork,
> SocketType.Dgram, ProtocolType.Udp)
>
> Dim sockaddr_in As New
> System.Net.SocketAddress(AddressFamily.InterNetwork)
> Dim sep As New System.Net.IPEndPoint(System.Net.IPAddress.Any, nPort)
> globalPort = nPort
> m_StreamSocket.Bind(sep.Create(sockaddr_in))
>
> Dim stws As New StreamThreadWithState(Me)
> m_hStreamThread = New System.Threading.Thread(AddressOf
> stws.StreamThread)
> m_hStreamThread.Start()
>
> "StreamThread" runs with the following code:
>
> While (1)
>
> Dim nResult As System.Int32
>
> ' Call StreamHandler(), the main worker function of
> this thread
> nResult = pThis.StreamHandler
>
> ' Check for error. Timeout errors are okay in this
> instance.
> If (((O22SIOMM.SIOMM_OK <> nResult) And
> (O22SIOMM.SIOMM_TIME_OUT <>
> nResult))) Then
> Exit While
> End If
>
> ' Check flag to see if we should keep looping
> If pThis.m_bListenToStreaming = False Then
> ' Stop looping
> nResult = O22SIOMM.SIOMM_OK
> Exit While
> End If
>
> ' Check the timeouts of all stream items
>
> pThis.CheckStreamTimeouts()
>
> pThis.m_hStreamThread.Sleep(1)
>
> End While
>
> The "StreamHandler" code is as follows:
>
> Dim ecode As Int32
> Dim nResult As System.Int32
> Dim bCriticalSectionFlag As Boolean = True
>
> Try
> If (m_StreamSocket Is Nothing) Then
> StreamHandler = SIOMM_ERROR_NOT_CONNECTED
> Exit Function
> End If
> Catch e As SocketException
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> e.Message, e.ErrorCode)
> StreamHandler = SIOMM_TIME_OUT
> Exit Function
> Catch e As ObjectDisposedException
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> e.Message)
> StreamHandler = SIOMM_TIME_OUT
> Exit Function
> Catch e As Exception
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> e.Message)
> StreamHandler = SIOMM_TIME_OUT
> Exit Function
> End Try
>
> ' Creates an IpEndPoint to capture the identity of the
> sending host.
> Dim sender As New
> System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
> Dim SourceAddr As System.Net.EndPoint = CType(sender,
> System.Net.EndPoint)
> Try
> Dim lep As System.Net.EndPoint
> Dim lipep As System.Net.IPEndPoint
> Dim lip As System.Net.IPAddress
> lip = New
> System.Net.IPAddress(System.Net.IPAddress.Parse(System.Net.Dns.GetHostByName(System.Net.Dns.GetHostName).AddressList(0).ToString()).Address)
> lipep = New System.Net.IPEndPoint(lip, globalPort)
> lep = lipep
> ' lep = New
> System.Net.IPEndPoint(lip, globalPort)
> ' lep = New
> System.Net.IPEndPoint(System.Net.IPAddress.Any,
> globalPort)
> ' m_StreamSocket.Bind(lep)
> Dim testbytes() As Byte
> ReDim testbytes(100)
> Dim idx
> For idx = LBound(testbytes) To UBound(testbytes)
> testbytes(idx) = New Byte
> testbytes(idx) = 0
> Next idx
> 'm_StreamSocket.SendTo(testbytes, SourceAddr)
> 'Result =
> m_StreamSocket.ReceiveFrom(m_pbyLastStreamBlock,
> m_nStreamLength, SocketFlags.None, SourceAddr)
>
> 'NOTE: I have already called BIND from OpenStreaming function
> 'HERE IS WHERE I BLOW UP
> nResult =
> m_StreamSocket.ReceiveFrom(m_pbyLastStreamBlock, 660,
> SocketFlags.None, SourceAddr)
> Catch e As SocketException
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> "m_StreamSocket.Bind : " & e.Message, e.ErrorCode)
> nResult = e.ErrorCode
> StreamHandler = SIOMM_ERROR
> Exit Function
> Catch e As ObjectDisposedException
> StreamHandler = SIOMM_ERROR
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> "m_StreamSocket.Bind : " & e.Message)
> Exit Function
> Catch e As Exception
> m_O22UTILS.writeOptoErrorToLog(Me.GetType.Name &
> ".StreamHandler",
> "m_StreamSocket.Bind : " & e.Message)
> StreamHandler = SIOMM_ERROR
>
> Exit Function
> End Try
>
> Next I make a call to "StartStreamListening" which does: (I don't think
> this is important because I am not even getting data from the server
> yet because of the receiveFrom failure)
>
> m_StreamCriticalSection.WaitOne()
> Checks a list of classes for data. Each class is supposed to have data
> or they will not be in the list
> m_StreamCriticalSection.ReleaseMutex()
>
> I have to ship this product by Friday 5/6/2005 and I am panicking
> because this function is the only item left to port before thorough
> testing can begin.
>
> Please , Please, Please can someone help.
>
> This is being run on Windows CE but when I run it on my desktop as a
> normal
> windows app, I don't get the invalidoperationException. Is this a bug in
> compact frameworks?
>
> Thanks,
> Mike Dixon
.
- Follow-Ups:
- Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- From: Stressed Out Developer
- Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- References:
- URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- From: Stressed Out Developer
- URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- Prev by Date: URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- Next by Date: Double Click Event In Custom Control
- Previous by thread: URGENT - InvalidOperationException on UDP ReceiveFrom call in Wind
- Next by thread: Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in
- Index(es):
Relevant Pages
|