Real Software Forums
http://forums.realsoftware.com/

TCP Socket - nonexisting IP problem
http://forums.realsoftware.com/viewtopic.php?f=2&t=46821
Page 1 of 1

Author:  mapmusic [ Tue Feb 05, 2013 5:52 am ]
Post subject:  TCP Socket - nonexisting IP problem

Hello Network experts,

I need check possibility of connect before running some code on TCP SOcket.
I use RCP socket example from reference, which works well on IPs which are available.
I got into problem, when I try to connect to nonexisting IP.

My Code:
Function TCP_Connect(xIP as string, xPort as integer) As Boolean
Dim start, stop as Integer
Dim conn as Boolean
Dim TCPSocket1 as TCPSocket
TCPSocket1 = New TCPSocket
TCPSocket1.Address = xIP
TCPSocket1.Port = xPort
TCPSocket1.Connect
start = Ticks
While Not TCPSocket1.IsConnected
If TCPSocket1.LastErrorCode <> 0 then
StatusBar.text = "Socket Error: " + str(TCPSocket1.LastErrorCode)
Exit

End If
//poll the socket to let it do its thing
TCPSocket1.Poll

Wend
stop = Ticks

//if we broke the loop because we're connected
If TCPSocket1.IsConnected then
GuardWindow.StatusBar.text= "Socket Connected in " + Str(stop - start) + " ticks"
//here would be a great place to do a synchronous read operation...
conn = true
Else
//The socket broke out of the loop due to an error
GuardWindow.StatusBar.text= "Socket failed to connect. It took " + Str(stop - start) + _
" ticks to figure that out"
conn= false
End If

TCPSocket1.Close
GuardWindow.StatusBar.text= "Socket closed"

return conn
End Function

Author:  pony [ Tue Feb 05, 2013 10:34 am ]
Post subject:  Re: TCP Socket - nonexisting IP problem

duplicate post, see my response to you other post


Add a timeout value after which to give up.
NOTE - Ticks can roll over, so add some error checking

Function TCP_Connect(xIP as string, xPort as integer) As Boolean
Dim start, stop as Integer
Dim conn as Boolean
Dim TCPSocket1 as TCPSocket
TCPSocket1 = New TCPSocket
TCPSocket1.Address = xIP
TCPSocket1.Port = xPort
TCPSocket1.Connect
start = Ticks
dim timeout as Integer = 180 //3 seconds
While Not TCPSocket1.IsConnected
If TCPSocket1.LastErrorCode <> 0 then
StatusBar.text = "Socket Error: " + str(TCPSocket1.LastErrorCode)
Exit
End If
TCPSocket1.Poll
if Ticks > start +timeout then //did 3 seconds elapse
StatusBar.text= "Timed out" //we time out, dang!
conn = false//no connection
exit//exit the loop
end
Wend
stop = Ticks
If TCPSocket1.IsConnected then
StatusBar.text= "Socket Connected in " + Str(stop - start) + " ticks"
conn = true
Else
StatusBar.text= "Socket failed to connect. It took " + Str(stop - start) + _
" ticks to figure that out"
conn= false
End If
TCPSocket1.Close
StatusBar.text= "Socket closed"
return conn
End Function

Page 1 of 1 All times are UTC - 5 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/