Red de conocimiento informático - Aprendizaje de código fuente - No sé cómo resolver la pregunta del sistema operativo, por favor ayúdenme...

No sé cómo resolver la pregunta del sistema operativo, por favor ayúdenme...

función de envío

int send( SOCKET s, const char FAR *buf, int len, int flags

Tanto las aplicaciones cliente como las de servidor utilizan el envío. función para enviar datos al otro extremo de la conexión TCP.

Los programas cliente generalmente usan la función de envío para enviar solicitudes al servidor, y el servidor generalmente usa la función de envío para enviar respuestas al programa cliente.

El primer parámetro de esta función especifica el descriptor del socket de envío

El segundo parámetro especifica un búfer para almacenar los datos que enviará la aplicación

; El tercer parámetro especifica el número real de bytes de datos que se enviarán.

El cuarto parámetro generalmente se establece en 0.

Aquí solo describimos el proceso de ejecución de la función de envío del Socket síncrono. Al llamar a esta función, enviar primero compara la longitud len de los datos que se enviarán con la longitud del búfer de envío del socket s. Si len es mayor que la longitud del búfer de envío de s, la función devuelve SOCKET_ERROR si len es. menor o igual a s. La longitud del búfer de envío, luego enviar primero verifica si el protocolo está enviando los datos en el búfer de envío de s. Si es así, espera a que el protocolo termine de enviar los datos. aún no ha comenzado a enviar los datos en el búfer de envío de s o en el búfer de envío de s. No hay datos en s, entonces enviar compara el espacio restante del búfer de envío de s con len. Si len es mayor que el tamaño del espacio restante, envía. esperará a que el protocolo termine de enviar los datos en el búfer de envío de s. Si len es menor que el tamaño del espacio restante, enviar simplemente copiará los datos en buf al espacio restante (tenga en cuenta que enviar no transfiere los datos en el búfer de envío). de s al otro extremo de la conexión, pero el protocolo. Send solo copia los datos en buf al búfer de envío de s (el espacio restante en el búfer). Si la función de envío copia los datos correctamente, devuelve el número real de bytes copiados. Si se produce un error cuando el envío copia los datos, el envío devuelve SOCKET_ERROR. Si la red se desconecta mientras el envío está esperando que el protocolo transmita los datos, el La función de envío también devuelve SOCKET_ERROR.

Cabe señalar que la función de envío regresa después de copiar con éxito los datos en buf al espacio restante del búfer de envío de s, pero en este momento los datos no necesariamente se transfieren inmediatamente al otro extremo de la conexión. Si ocurre un error de red durante la transmisión posterior del protocolo, la siguiente función de Socket devolverá SOCKET_ERROR. (Cada función de Socket, excepto enviar, siempre espera a que el protocolo transmita los datos en el búfer de envío del socket al comienzo de la ejecución. Si se produce un error de red mientras se espera, la función de Socket devolverá SOCKET_ERROR)

Nota: En los sistemas Unix, si la red se desconecta mientras el envío espera que el protocolo transmita datos, el proceso que llama al envío recibirá una señal SIGPIPE y el procesamiento predeterminado de la señal por parte del proceso es la terminación del proceso.

/info/html/edu/20060102/295985.html