Re: URGENT - InvalidOperationException on UDP ReceiveFrom call in





"Paul G. Tobey [eMVP]" wrote:

> 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
>
>
>


Paul,
Thanks for your response. It will take me a few minutes to get a
simple example built and then I will post it. To answer your other
questions:

You are correct that the WinCE device opens a datagram socket and will
receive data from the server (when receiveFrom or alternative works). This
is a closed network so there will only be one server on it and in the case of
multiple servers, we will be coding for that. The network is a cat5 based
ethernet system that is totally isolated from the rest of the world. I will
post some shorter code in a few minutes.

Thanks,
Mike Dixon
.



Relevant Pages

  • SecurityFocus Microsoft Newsletter #154
    ... MICROSOFT VULNERABILITY SUMMARY ... ISS RealSecure Server Sensor SSL Denial Of Service Vulnerabi... ... Roger Wilco Remote Server Side Buffer Overrun Vulnerability ... available for Microsoft Windows operating systems. ...
    (Focus-Microsoft)
  • SecurityFocus Microsoft Newsletter #49
    ... Subject: SecurityFocus Microsoft Newsletter #49 ... Microsoft Windows NNTP Denial of Service Vulnerability ... Microsoft IIS SSI Buffer Overrun Privelege Elevation Vulnerability ... Microsoft ISA Server H.323 Memory Leak Denial of Service... ...
    (Focus-Microsoft)
  • Questions Relating to Administering Windows 2000 Server
    ... installed the network client on the target computer. ... Sarah has been attempting to install Windows 2000 ... Server for two days. ... Sarah has checked the cables and hard drives. ...
    (microsoft.public.cert.exam.mcse)
  • pqv¼Ò¹ÚÇÑ ²Þ@mBGRx
    ... O-009¹Ù¢Ã MS Windows 2000 Datacenter Server -2¸¸¿ø ... Main Application (Borland C++ Builder 6 Enterprise Edition) ... Y-166¢Ã Sex Starved Sluts 1 (Divx) ...
    (FreeBSD-Security)
  • Questions Relating to Administering Windows 2000 Server
    ... installed the network client on the target computer. ... Sarah has been attempting to install Windows 2000 ... Server for two days. ... Sarah has checked the cables and hard drives. ...
    (microsoft.public.cert.exam.mcse)