Mombu the Microsoft Forum sponsored links

Go Back   Mombu the Microsoft Forum > Microsoft > WINDOWS PROGRAMMING (NNTP) > URGENT - InvalidOperationException on UDP ReceiveFrom call
User Name
Password
REGISTER NOW! Mark Forums Read

sponsored links


Reply
 
1 8th July 16:18
frustrated
External User
 
Posts: 1
Default URGENT - InvalidOperationException on UDP ReceiveFrom call



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.InterNetwor k)
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(Sy stem.Net.Dns.GetHostByName(System.Net.Dns.GetHostN ame).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.

Thanks,
Mike Dixon
  Reply With Quote


  sponsored links


2 8th July 16:18
peter duniho
External User
 
Posts: 1
Default URGENT - InvalidOperationException on UDP ReceiveFrom call



Ignoring for a moment the bizarre juxtaposition of a UDP socket with
something that claims to be streaming (we may return to this later )...

Given that you're posting as someone who has a near deadline to meet, you
might want to consider providing more details on what exactly doesn't work.
I asked the MSDN search engine to find "blow up" and "winsock" on the same
page, and it came up with nothing.

Pete
  Reply With Quote
Reply


Thread Tools
Display Modes




Copyright © 2006 SmartyDevil.com - Dies Mies Jeschet Boenedoesef Douvema Enitemaus -
666