我试图在丢失连接时使用dont linger重新连接到服务器
Public Class Agent
Dim bytes(1024) As Byte
Dim remoteEP As New IPEndPoint(IPAddress.Parse(My.Settings("HostIP").ToString), CType(My.Settings("HostPort"), Integer))
Dim permis As New SocketPermission(NetworkAccess.Connect, TransportType.Tcp, "", SocketPermission.AllPorts)
Dim S As New Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
如果连接成功,则会转到getdatadb
,如果没有先转到socketclose
,然后再次尝试连接
Sub Connect()
Try
S.Connect(remoteEP)
Catch ex As Exception
socketclose()
S.Connect(remoteEP)
End Try
GetDataDb()
End Sub
用这个来关闭套接字
Sub socketclose()
Dim myOpts As New LingerOption(True, 1)
S.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, myOpts)
S.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, False)
S.Shutdown(SocketShutdown.Both)
S.Close()
End Sub
但它仍然显示异常
断开插座后,您只能重新连接 异步,并且只对不同的EndPoint。 BeginConnect必须 在一个线程上被调用,该线程在操作完成之前不会退出 完成。
我不知道为什么dontlinger不起作用。