Red de conocimiento informático - Problemas con los teléfonos móviles - Funciones comunes de los sockets

Funciones comunes de los sockets

Prototipo de función:

int socket(dominio int, tipo int, protocolo int

Descripción del parámetro:

dominio: protocolo); Dominio, también llamado familia de protocolos. Las familias de protocolos más utilizadas incluyen AF_INET, AF_INET6, AF_LOCAL (o AF_UNIX, socket de dominio Unix), AF_ROUTE, etc. La familia de protocolos determina el tipo de dirección del socket y se debe utilizar la dirección correspondiente durante la comunicación. Por ejemplo, AF_INET determina que se debe usar una combinación de dirección ipv4 (32 bits) y número de puerto (16 bits), mientras que AF_UNIX determina que se debe usar un nombre de ruta absoluto para la dirección.

Tipo: Especifica el tipo de socket. Los tipos de sockets más utilizados incluyen SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_PACKET, SOCK_SEQPACKET, etc. El socket de transmisión (SOCK_STREAM) es un socket orientado a la conexión, principalmente para programas de servicio TCP orientados a la conexión. El socket de datagrama (SOCK_DGRAM) es un socket sin conexión adecuado para programas de servicio UDP sin conexión.

Protocolo: Especifica el protocolo. Los protocolos de uso común incluyen IPPROTO_TCP, IPPROTO_UDP, IPPROTO_STCP, IPPROTO_TIPC, etc., que corresponden respectivamente al protocolo de transmisión TCP, al protocolo de transmisión UDP, al protocolo de transmisión STCP y al protocolo de transmisión TIPC.

Nota: 1. Los tipos y protocolos no se pueden combinar a voluntad. Por ejemplo, SOCK_STREAM no se puede combinar con IPPROTO_UDP. Cuando el tercer parámetro es 0, se selecciona automáticamente el protocolo predeterminado correspondiente al tipo del segundo parámetro.

2.IPPROTO_STCP no existe en los parámetros de protocolo de Windows Sockets.

Valor de retorno:

Si la llamada tiene éxito, devuelve el descriptor del socket recién creado; si falla, devuelve INVALID_SOCKET (o -1 si falla en Linux). Un descriptor de socket es un valor entero. Cada proceso tiene una tabla de descriptores de socket en el espacio del proceso, que registra la correspondencia entre los descriptores de socket y las estructuras de datos de socket. Un campo en la tabla contiene el descriptor del socket recién creado y otro campo contiene la dirección de la estructura de datos del socket, de modo que la estructura de datos del socket correspondiente se puede encontrar en función del descriptor del socket. Cada proceso tiene una tabla de descriptores de socket en su propio espacio de proceso, pero las estructuras de datos del socket están en el búfer del kernel del sistema operativo. Prototipo de función:

int bind(SOCKET socket, const struct sockaddr* dirección, socklen_t address_len);

Descripción del parámetro:

socket: es un descriptor de socket.

dirección: es un puntero a la estructura sockaddr, que contiene la dirección y el número de puerto que se fusionarán.

address_len: Determina la longitud del buffer de direcciones.

Valor de retorno:

Si la función se ejecuta correctamente, el valor de retorno es 0; de lo contrario, el valor de retorno es SOCKET_ERROR. Prototipo de función:

int recv(SOCKET socket, char FAR* buf, int len, int flags

Descripción del parámetro:

socket: identifica el conectado); Un descriptor del socket.

buf: Buffer utilizado para recibir datos.

len: La longitud del buffer.

Flag: Especifica el modo de llamada. Valores: MSG_PEEK se usa para ver los datos actuales, que se copiarán en el búfer pero no se eliminarán de la cola de entrada; MSG_OOB se usa para manejar datos fuera de banda.

Valor de retorno:

Si no se produce ningún error, recv() devuelve el número de bytes leídos. Si se canceló la conexión, se 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().

Prototipo:

size_t recvfrom(int sockfd, void buf, int len, unsigned int flags, struct socketaddr* from, socket_t* fromlen);

Parámetros Descripción:

Descripción del parámetro:

sockfd: un descriptor que identifica el socket conectado.

buf: buffer de recepción de datos.

len: longitud del buffer.

flags: Modo de operación de llamada. Es una combinación de uno o más de los siguientes indicadores, que se pueden conectar mediante la operación OR:

(1) MSG_DONTWAIT: La operación no se bloqueará

(2) MSG_ERRQUEUE: Indica que el valor del error debe recibirse de la cola de errores del socket y, según el protocolo, se pasará como un mensaje auxiliar. El usuario debe proporcionar un búfer lo suficientemente grande. El paquete original que causó el error se pasará como datos normales a través de msg_iovec. La dirección de destino original del datagrama que causó el error se proporciona como msg_name. Los errores se utilizan en forma de estructura sock_extended_err.

(3) MSG_PEEK: indica que después de recibir datos, los datos originales permanecerán en la cola de recepción y no se eliminarán, y los mismos datos se pueden recibir en operaciones de lectura posteriores.

(4) MSG_TRUNC: Devuelve la longitud real del paquete, incluso si la longitud excede el búfer proporcionado, solo es válido para sockets de paquetes.

(5) MSG_WAITALL: La solicitud bloquea la operación hasta que la solicitud se satisface por completo. Sin embargo, si se capta la señal, se produce un error, se pierde la conexión o si la próxima vez se recibe un tipo diferente de datos, la cantidad de datos devueltos seguirá siendo menor que la cantidad de datos solicitados.

(6) MSG_EOR: Indica el final de la grabación y devuelve datos para completar la grabación.

(7)MSG_TRUNC: Indica que los datos al final del datagrama han sido descartados porque requiere más espacio que el buffer proporcionado.

/* (El uso de MSG_TRUNC es incorrecto, 4 es la interpretación correcta de MSG_TRUNC)*/

(8) MSG_CTRUNC: Indica que debido a un espacio de búfer insuficiente, algunos datos de control ha sido descartado.

(9)MSG_OOB: Indica que se han recibido datos fuera de banda (es decir, datos que necesitan procesamiento prioritario).

(10)MSG_ERRQUEUE: Indica que no se han recibido otros datos excepto errores en la cola de errores del socket.

desde: (opcional) Puntero al búfer que contiene la dirección de origen.

fromlen: (opcional) Puntero al valor de longitud del búfer. Prototipo de función:

int sendto( SOCKET s, const char FAR* buf, int size, int flags, const struct sockaddr FAR* to, int tolen

Descripción del parámetro:

s:zócalo