socket receive example ejemplos async c# sockets network-programming

receive - socket tcp ip c#



C#Una conexión establecida fue abortada por el software en su máquina host (1)

Estos errores son cada vez más frecuentes en mi Game Server. Están causando que el servidor siga cerrando y reiniciando ...

System.Net.Sockets.SocketException (0x80004005): An established connection was aborted by the software in your host machine at System.Net.Sockets.Socket.BeginSend(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags, AsyncCallback callback, Object state) at iRP.Game.Sessions.Session.SendData(Byte[] Data)

Este es el código del que se generan estos errores:

public void SendData(byte[] Data) { try { if (mSocket == null) { //Output.WriteLine("[SND] Socket has a null exception, which means it is now invalid. Remove this socket!", OutputLevel.CriticalError); } else { mSocket.BeginSend(Data, 0, Data.Length, SocketFlags.None, sendCallback, mSocket); } } catch (Exception e) { string WhatToWrite = "Error handled (SESSION): " + e.ToString() + "/n/n" + e.Message + "/n/nStack: " + e.StackTrace + Environment.NewLine + "/n/n"; File.AppendAllText(Environment.CurrentDirectory + "//data//fatal.txt", WhatToWrite); Program.Stop(); } }

Los tamaños de búfer están configurados correctamente, estamos utilizando KeepAlive en el zócalo y estábamos usando tiempos de espera de envío y recepción.

La gente sugirió que la desactivación del firewall ayudaría, pero cada vez que hago esto, nuestro Game Server (Servidor Dedicado) se reinicia como si estuviera bajo ataque, por lo que el firewall debe permanecer habilitado.

¿Alguien más tiene otras soluciones para esto?

PD: Estamos detrás de los Servicios de Mitigación de DDoS que pueden estar limitando el número de conexiones ...


Una conexión establecida fue abortada por el software en su máquina host

Ese es un mensaje de error de la placa de la caldera, sale de Windows. El código de error subyacente es WSAECONNABORTED. Lo que realmente no significa más que "se abortó la conexión". Tiene que ser un poco cuidadoso con la parte de la frase "su máquina host". En la gran mayoría de los programas de aplicaciones de Windows, el host al que está conectada la aplicación de escritorio abortó la conexión. Por lo general, un servidor en otro lugar.

Sin embargo, los roles se invierten cuando implementa su propio servidor. Ahora debe leer el mensaje de error como "cancelado por la aplicación en el otro cable". Lo cual, por supuesto, no es raro cuando implementa un servidor, es poco probable que los programas cliente que usan su servidor aborten una conexión por cualquier razón. Puede significar que un cortafuegos o un proxy interrumpe la conexión, pero no es muy probable, ya que, por lo general, no permitirían establecer la conexión en primer lugar.

Realmente no sabes por qué se abortó una conexión a menos que tengas una idea de lo que está sucediendo en el otro extremo del cable. Eso es, por supuesto, difícil de conseguir. Si su servidor es accesible a través de Internet, no descarte la posibilidad de que un explorador de puertos lo esté probando. O a tus clientes, que buscan un juego de trampa.