Estoy tratando de detener un Oyente TCP cuando mi programa está saliendo. No me importan los datos que estén actualmente activos en el socket o cualquiera de los sockets de clientes activos.TcpListener El socket sigue activo después de las salidas del programa
La toma de limpiar el código es esencialmente:
try
{
myServer.Server.Shutdown(SocketShutdown.Both)
}
catch (Exception ex)
{
LogException(ex)
}
myServer.Server.Close(0)
myServer.Stop()
miServidor es un TCPListener
En algunas ocasiones, apagado se produce una excepción
System.Net.Sockets.SocketException: No se permitió una solicitud para enviar o recibir datos porque el socket no está conectado y (cuando se envía en un socket de datagrama usando una llamada a sendto) no se suministró ninguna dirección en Sys tem.Net.Sockets.Socket.Shutdown (SocketShutdown cómo)
Edición 2010-mayo-14
Tras realizar investigaciones adicionales, la excepción puede ser lanzada y el zócalo se puede cerrar correctamente.
A veces, incluso después de que la aplicación sale de netstat muestra que el zócalo aún está en el estado de ESCUCHA.
No he podido crear un escenario de reproducción definitiva, sucede en momentos aparentemente aleatorios.
Los zócalos de cliente se limpian de forma independiente.
¿Tiene alguna sugerencia que me ayude a hacer que este socket muera?
Las tomas de corriente C# se están comportando bastante raras en mi opinión. O tal vez solo son ventanas.Tengo un problema similar (aún no resuelto), quizás las respuestas te ayuden, aunque nuestros problemas son un poco diferentes: http://stackoverflow.com/questions/2821520/how-can-i-unbind-a-socket- in-c – IVlad
Los problemas son muy similares. El socket permanece en el estado LISTENING, no cambia a TIME_WAIT. Relanzar la aplicación provoca el error "Solo un uso de cada dirección de socket ...". – lnical
Bueno, solo estaba siendo estúpido, obtuve la solución ahora. El problema es que me funcionó después de reiniciar el programa, no sin reiniciarlo. ¿Estás usando hilos en tu programa? – IVlad