我有一个循环打开一个套接字,作用于套接字,然后关闭套接字并重新启动.但是,在我得到的第二次迭代中SocketException
,通常只允许使用每个套接字地址(协议/网络地址/端口).
但是,套接字应该关闭,netstat -a
并不表示我正在侦听该端口或任何东西.抛出异常的代码是:
_bindedLocalSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _bindedLocalSocket.Bind(new IPEndPoint(Util.ChannelProfileToListeningAddress(_profile), _profile.ListenPort)); _bindedLocalSocket.Listen(30); _bindedLocalSocket.BeginAccept(new AsyncCallback(OnRequested), null);
但是,我认为罪魁祸首不是代码,就在我开始使用该代码之前,在我尝试关闭连接之前,我得到了这个:
An existing connection was forcibly closed by the remote host at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) at Poderosa.PortForwarding.SynchronizedSocket.EndReceive(IAsyncResult ar) at Poderosa.PortForwarding.Channel.OnSocketData(IAsyncResult result)
一旦我关闭程序并再次运行它,它可以使第一个连接正常,第二个连接正常(SocketException).有谁知道如何解决这个问题?
我以为socket.Close()负责这个,但我猜不是.在这种情况下,您需要使用:
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
您可以在此处详细了解套接字选项.