Jerod
I'm reading up on async sockets now. Maybe this is a stupid question, but
why didn't you use p_Socket.BeginConnect instead of Connect? Wouldn't
BeginConnect be better as it wouldn't hang your app if a connection couldn't
be made? I am definitely a newby with this but I'm planning on using
BeginConnect, BeginSend, and BeginReceive to keep my app from hanging under
any conditions. Am I missing something?
Clark
"Jerod Venema" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Can you describe in a little more detail what exactly you're doing?
> Generally, you don't start receiving data until you explicitly do a
> .BeginReceive when you use the async sockets. I have a wrapper for
> AsyncTCP that I wrote...uses a "Connect" function, that does this:
>
> Public Sub Connect(ByVal ipAddress As String, ByVal port As
> Integer)
> ' Create socket and connect
> If p_sw Is Nothing And p_LogFile <> "" Then
> p_sw = New IO.StreamWriter(p_LogFile, True)
> p_sw.AutoFlush = True
> End If
> p_socket = New Socket(AddressFamily.InterNetwork,
> SocketType.Stream, ProtocolType.Tcp)
> p_socket.SetSocketOption(SocketOptionLevel.Socket,
> SocketOptionName.KeepAlive, 0)
> Dim endPoint As New IPEndPoint(Net.IPAddress.Parse(ipAddress),
> port)
> p_socket.Connect(endPoint)
>
> WriteToLog("Connection at " & Time)
> RaiseEvent Connected()
> End Sub
>
> And then I start listening for data using this:
>
> Public Sub StartReceive()
> ' set up one receive packet
> Dim packet As New SocketPacket(p_socket)
> p_socket.BeginReceive(packet.Buffer, 0, packet.Buffer.Length,
> SocketFlags.None, New AsyncCallback(AddressOf EndReceive), packet)
> p_rcvsWaitingCount += 1
> End Sub 'StartReceive
>
> Which will then call your EndReceive method. This way, you shouldn't
> end up with any sort of data arriving (at least, not getting processed)
> before you're ready.
>
|