当前位置:  开发笔记 > 编程语言 > 正文

如何解决这个SocketException

如何解决《如何解决这个SocketException》经验,为你挑选了1个好方法。

我有一个循环打开一个套接字,作用于套接字,然后关闭套接字并重新启动.但是,在我得到的第二次迭代中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).有谁知道如何解决这个问题?



1> ryeguy..:

我以为socket.Close()负责这个,但我猜不是.在这种情况下,您需要使用:

socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);

您可以在此处详细了解套接字选项.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有