2011-02-18 8 views
5

Socket.Disconnect(bool reuse) de acuerdo con MSDN permite que el programa reutilice el socket. Mis preguntas son:Socket.Disconnect (bool reuse)

  1. Si decidimos reutilizar el socket, ¿eso significa que reutilizará el mismo punto final local también? ¿Conservaría el puerto para ese socket o simplemente (no creo que lo haga) guardará todos los recursos de los objetos?

  2. Si en efecto, solo guarda los recursos, ¿se asignarían a la próxima conexión y, de ser así, los búferes de envío/recepción se enjuagarán automáticamente o existe alguna forma de eliminarlos? ¿Lo hace Socket.ShutDown(ShutDown.Both) por desconexión?

  3. ¿En qué situación usaría Socket.Disconnect(false)? Si todo el propósito es reutilizar el socket, ¿qué me concedería esto?

+0

Sé que esto no responde a sus preguntas explícitamente, pero esta respuesta proporciona más detalles sobre los diferentes comportamientos entre cerrar un socket .NET y qué impacto tiene realmente en el socket de Windows: http: // stackoverflow.com/questions/2014887/socket-close-doesnt-really-close-tcp-socket-c En el mejor de los casos, parece que no se le GARANTIZARá un punto final diferente, simplemente llamando a Shutdown y Close en el objeto socket. – JNadal

Respuesta

5
  1. Si reutilización = false el zócalo estará dispuesto de forma automática después del cierre. Todas las configuraciones como tamaños EndPoint y Buffer no se restablecen a los valores predeterminados, pero puede cambiarlo si lo desea. Supóngase que el usuario decide cambiar el puerto de conexión. Solo tiene que cerrar el zócalo, cambiar el puerto y volver a conectar el zócalo sin crear un zócalo nuevo y configurarlo de nuevo.

  2. El Socket.Shutdown simplemente desactiva send/receive/both; no desconectar el enchufe. Sin embargo, esto ocurre con los nuevos datos entrantes/salientes, por lo que los búferes se eliminarán normalmente. Es una buena práctica llamar antes de la desconexión para garantizar que se hayan enviado todos los datos y que no se reciban datos mientras se desconecta.

  3. Volviendo al ejemplo de 1. Supongamos que solo necesita cambiar el puerto. No desea volver a crear el socket, configurar todos los parámetros del socket como eventos y búferes nuevamente, etc. Consume tiempo y recursos, por lo que es mejor reutilizar el socket que ya tiene.