J'ai une boucle qui ouvre une socket, agit sur le socket, puis ferme le socket et redémarre. Toutefois, lors de la deuxième itération, j'obtiens SocketException
, Une seule utilisation de chaque adresse de socket (protocole/adresse réseau/port) est normalement autorisée.
Cependant, le socket doit être fermé, netstat -a
ne montre pas que j'écoute sur ce port ou quoi que ce soit. Le code qui lève l'exception est:Comment réparer cette SocketException
_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);
Cependant, je pense que le coupable n'est pas ce code, juste avant de passer à ce code, et avant que j'essaie de fermer la connexion je reçois ceci:
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)
Une fois que je ferme le programme et l'exécute à nouveau, il peut faire la première connexion bien, le second agit exactement la même chose (SocketException). Quelqu'un at-il une idée de comment je peux résoudre ce problème?
cela résout ce problème, mais maintenant je rencontre des problèmes avec mon programme essayant d'accéder à un Socket disposé :( – Malfist
Si vous utilisez socket.close(), je crois que vous devez faire un nouvel objet socket tous ensemble. pour utiliser le même objet, je pense que vous devez utiliser socket.disconnect(). Regardez les documents MSDN - je ne suis pas sûr à 100%, mais je suis à peu près sûr que c'est ce que la déconnexion est faite pour – ryeguy
Je ferme le SSHConnection qui gère la fermeture de la socket, ou est supposé ... – Malfist