J'ai un programme en C# dans lequel je crée un socket, je le lie, je commence à écouter puis j'utilise beginaccept! mais quand j'essaye de fermer \ shutdown le socket j'obtiens des exceptions de la méthode de beginaccept AsyncCallback!Impossible de fermer le socket après la méthode BeginAccept
private void start_listening()
{
main_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, 11150);
main_socket.Bind(iplocal);
main_socket.Listen(5);
main_socket.BeginAccept(new AsyncCallback(OnClientConnect), null);
}
private void Disconnect_Click(object sender, EventArgs e)
{
main_socket.Shutdown(SocketShutdown.Both);
main_socket.Close();
}
public void OnClientConnect(IAsyncResult asyn)
{
try
{
clients[connected_clients] = new Client("CHANGEME", "127.0.0.1", this);
clients[connected_clients].Socket = main_socket.EndAccept(asyn);
clients[connected_clients].WaitForData();
main_socket.BeginAccept(OnClientConnect, null);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
merci beaucoup!
+1. Malheureusement, il n'y a pas de propriétés telles que "IsClosed". Socket vient du monde sombre et non géré de Cthulhu. – Roubachof
En fait, il existe un moyen: Socket.Handle sera -1 si le socket a été fermé dans le côté local de la connexion. – Gonzalo
merci les gars pour les réponses! Je vais vérifier ça. alors vous dites que quand je me suis jeté dans onclientconnect parce que la prise est fermée je devrais gérer cette excaption? – Hipno