Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuál es la diferencia entre cerrar() y apagar() en la programación de Socket?

¿Cuál es la diferencia entre cerrar() y apagar() en la programación de Socket?

1. Diferentes referencias

1. Shutdown(): se refiere a prohibir la recepción y envío de datos en un socket.

2. close(): cierra un socket. Más precisamente, libera los descriptores de socket y los accesos posteriores a los s devolverán un error WSAENOTSOCK.

2. Principios diferentes

1. apagado(): si el parámetro how es 0, se prohibirán las operaciones de recepción posteriores en el socket. Esto no tiene ningún efecto en los protocolos de capa inferior. Para el protocolo TCP, la ventana TCP no cambia y los datos entrantes se reciben (pero no se confirman) hasta que la ventana esté llena. Para el protocolo UDP, los datos entrantes se reciben y se ponen en cola. Bajo ninguna circunstancia se generará un paquete de error ICMP.

2. close(): para el último acceso al socket, se liberará la información del nombre correspondiente y la cola de datos. La semántica de closesocket() se ve afectada por las opciones SO_LINGER y SO_DONTLINGER.

3. Características diferentes

1. Shutdown(): una aplicación no debe depender de la reutilización de un socket que ha sido deshabilitado por Shutdown(). En particular, una implementación de socket de Windows no necesita soportar el uso de llamadas connect() en dichos sockets.

2. close(): Si no se produce ningún error, closesocket() devuelve 0. De lo contrario, se devuelve un error SOCKET_ERROR y la aplicación puede obtener el código de error correspondiente a través de WSAGetLastError().

Enciclopedia Baidu-shutdown()

Enciclopedia Baidu-closesocket()