Programación de socket·envío y recepción
El envío y recepción de sockets admiten TCP y UDP. Del diseño de estas dos funciones se puede ver que el protocolo simplemente lee y escribe datos.
La opción de socket es SOCK_STREAM.
El valor de retorno de envío; cuando es 0, indica cuántos bytes se enviaron realmente. Nota: Simplemente copie al caché del sistema, el sistema decide cuándo enviar los datos.
Cuando el valor de retorno de envío == 0, esto sucederá al enviar una cadena vacía, lo cual es normal.
Cuando el valor de retorno de envío es 0 (solo será igual a -1), debe verificar errno Cuando errno == EINTR || errno == EWOULDBLOCK || La conexión es normal. Puedes volver a intentarlo más tarde. La otra cosa es que la conexión es anormal.
El valor de retorno de recv; cuando es 0, indica cuántos bytes se recibieron realmente.
Cuando el valor de retorno de recv == 0, significa que la conexión está desconectada, es decir, se recibe FIN o RST.
Cuando el valor de retorno de recv es 0, marque errno, similar a enviar.
La opción de socket es SOCK_DGRAM.
El valor de retorno de envío; cuando es 0, el valor de retorno debe ser igual a la longitud de los datos enviados. Si los datos enviados son mayores que la MTU, se fragmentarán en la capa IP y se volverán a ensamblar en la capa IP después de llegar a la máquina de destino.
Cuando el valor de retorno de enviar == 0, esto solo aparece cuando se envía una cadena vacía. Nota: En realidad, se enviarán datos vacíos.
Cuando el valor de retorno de envío es 0, marque errno para determinar si la conexión sigue siendo normal. Generalmente no sucederá, el envío UDP se envía directamente.
El valor de retorno de recv es gt; cuando es 0, se recibe un paquete de datos completo. Esta integridad está garantizada por la capa IP.
Cuando el valor de retorno de recv == 0, se recibe un paquete vacío, que es muy diferente de TCP.
Cuando el valor de retorno de recv es 0, verifique errno para determinar si el socket es normal.
PD: UDP también tiene dos funciones sendto y recvfrom. El cliente solo puede usar send y recv después de llamar a connect, y el servidor solo puede usar sendto y recvfrom.
UDP no tiene conexión ni orden, por lo que no puede reemplazar a TCP.
TCP es un protocolo de transmisión que requiere que la capa de aplicación confirme si los datos se aceptan por completo y no puede reemplazar a UDP.
Para soportar ambos protocolos al mismo tiempo, la aplicación debe estar empaquetada en la capa superior. Existe KCP, que utiliza UDP para simular TCP.