Estas funciones de Socket se comunican directamente con el protocolo de Internet para enviar información. En comparación con las corrientes de fopensock, operan a un nivel relativamente bajo. Por lo general, encapsulan funciones de C y tienen nombres similares. Si tiene experiencia con la programación de sockets en C, se sentirá muy cómodo usando estas funciones. No discutiremos aquí la programación de sockets con especial detalle.
Utilice estas funciones para resolver problemas difíciles que las funciones de nivel superior no pueden. El uso de estas funciones puede lograr funciones similares a fopen. Es posible que tenga muchas formas de implementar funciones de socket, como el demonio de Internet implementado mediante CLI (interfaz de línea de comandos) en PHP.
socket de recurso_accept(zócalo de recurso)
En el lado del servidor de su script, use socket_accept para aceptar una conexión entrante. Primero debe crear un socket, vincularlo a un nombre y configurarlo para que escuche en un puerto. En modo bloque, socket_accept generará una conexión aceptada única. En modo sin bloqueo, devuelve falso si no se establece ninguna conexión. Además, cuando tenga un nuevo recurso de socket, podrá realizar operaciones de lectura y escritura.
A continuación demostraremos un servidor de eco simple. Se ejecuta bajo la CLI (línea de comando) y espera conexiones de cliente en el puerto 12345.
socket_aceptar
<?php
set_time_limit(0);
//crea el socket
if(($socket = socket_create(AF_INET, SOCK_STREAM, 0)) < 0){
print("No se pudo crear el socket: " . socket_strerror(socket_last_error()) . "n");
}
//vincularlo a la dirección y puerto dados
if(($error = socket_bind($socket, gethostbyname($_SERVER['HOSTNAME']), 12345)) < 0){
print("No se pudo vincular el socket: " . socket_strerror(socket_last_error()) . "n");
}
if(($error = socket_listen($socket, 5)) < 0){
print("No se pudo listar en el socket: ".
socket_strerror(socket_last_error()) "n");
}
mientras(VERDADERO){
//esperar conexión
si(($aceptar = socket_accept($socket)) < 0){
print("Error al leer: " . socket_strerror($mensaje). "n");
romper;
}
//enviar mensaje de bienvenida
socket_write($aceptar, "Conexión aceptadan");
print(date('Ymd H:i:s') . " ESTADO: Conexión aceptadan");
ob_flush();
mientras(VERDADERO){
//leer línea del cliente
if(FALSE === ($linea = socket_read($aceptar, 1024))){
print("No se pudo leer desde el socket: ".
socket_strerror(socket_last_error()) "n");
romper 2;
}
if( !@socket_write($aceptar , "ECHO: $línea")){
print(date('Ymd H:i:s') . " ESTADO: Conexión interrumpidan");
romper;
}
print(fecha('Ymd H:i:s') . " LEER: $línea");
ob_flush();
}
socket_close($aceptar);
}
?>
bool socket_bind(socket de recurso, dirección de cadena, puerto entero)
Este socket_bind() vincula un recurso de socket a una dirección. Este socket debe ser un recurso devuelto por la función socket_create(). Esta dirección debe ser una dirección IP o una ruta a un socket Unix. Si se trata de un socket que se ejecuta en Internet, también debe proporcionar un puerto.
socket_clear_error(zócalo de recurso)
Esta función puede borrar errores para el socket especificado. Si no se especifica ningún parámetro, se borrarán todos los errores de socket.
socket_close(zócalo de recurso)
La función socket_close cierra un socket y borra los recursos de memoria ocupados por el socket.
booleano socket_connect(socket de recurso, dirección de cadena, puerto entero)
Esta función crea una conexión de cliente a un puerto o socket. Debe proporcionar un socket generado por socket_create. El parámetro de dirección debe ser la ruta a un socket o una dirección IP. Si es este último, también debe ir seguido de un número de puerto numérico.
El siguiente ejemplo demuestra el proceso de conexión al servidor del juego y obtención de información utilizando el protocolo UDP.
conexión_zócalo
<?php
//crear conector UDP
if(($socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP)) < 0){
print("No se pudo crear el socket: ".
socket_strerror(socket_last_error()) "n");
}
//tiempo de espera después de 5 segundos
socket_set_option($socket, SOL_SOCKET,
SO_RCVTIMEO, array('sec'=>5,'usec'=>0));
//conectar al servidor maestro RtCW
if(!socket_connect($socket, 'wolfmaster.idsoftware.com', 27950)){
print("No se pudo conectar: ".
socket_strerror(socket_last_error()) "n");
}
//enviar solicitud de servidores
socket_write($socket, "xFFxFFxFFxFFgetserversx00");
//obtener servidores
$servidor = matriz();
mientras(FALSO!== ($línea = @socket_read($socket, 4096))){
//analizar datos
para($i=22; ($i+5) < strlen($línea); $i += 7){
$ip = orden(substr($línea, $i+1, 1)) '.'
orden(substr($línea, $i+2, 1)) '.'
orden(substr($línea, $i+3, 1)) '.'
ord(substr($línea, $i+4, 1));
$puerto = (ord(substr($linea, $i+5, 1)) * 256) +
ord(substr($línea, $i+6, 1));
$servidor[] = array('ip'=>$ip, 'puerto'=>$puerto);
}
}
print("<h1>" . count($servidor) . " Servidores</h1>n");
//recorre los servidores, obteniendo el estado
foreach($servidor como $s){
print("<h1>{$s['ip']}:{$s['puerto']}</h1>n");
//conectar al servidor RtCW
if(!socket_connect($socket, $s['ip'], $s['puerto'])){
imprimir("<p>n".
socket_strerror(socket_last_error()) .
"n</p>n");
continuar;
}
//enviar solicitud de estado
socket_write($socket, "xFFxFFxFFxFFgetstatusx00");
//obtener estado del servidor
si(FALSO === ($línea = @socket_read($socket, 1024))){
imprimir("<p>n".
socket_strerror(socket_last_error()) .
"n</p>n");
continuar;
}
$parte = explotar("n", $linea);
//las configuraciones están en la segunda línea separadas por barras invertidas
$configuración = explotar("\", $parte[1]);
print("<h2>Configuración</h2>n");
imprimir("<p>n");
para($s=1; $s < recuento($configuración); $s += 2){
print("tt{$configuración[$s]} = {$configuración[$s+1]}<br>n");
}
imprimir("</p>n");
print("<h2>Jugadores</h2>n");
$últimojugador = recuento($parte) - 1;
for($p=2; $p < $último jugador; $p++){
$jugador = explotar(" ", $parte[$p]);
print("{$jugador[2]} Puntuación={$jugador[0]} ".
"Ping={$jugador[1]}<br>n");
}
imprimir("</p>n");
ob_flush();
}
imprimir("</table>n");
socket_close($socket);
?>
recurso socket_create (familia de enteros, tipo de socket entero, protocolo de entero)
socket_create inicializa una estructura de socket. El primer parámetro es una familia de protocolos o dominio. Debe utilizar AF_INET para especificar una conexión a Internet o AF_UNIX para especificar una conexión de socket Unix. El segundo parámetro es un tipo de enchufe, que puede elegir en la siguiente tabla. Generalmente, use SOCK_STREAM para usar el protocolo TCP y el protocolo UDP para usar SOCK_DGRAM. El tercer parámetro especifica un protocolo. Utilice SOL_TCP o SOL_UDP para corresponder a los protocolos TCP y UDP respectivamente. Otra opción es que puedes usar la función getprotobyname para manejar esto.
Descripción constante del tipo de socket
SOCK_DGRAM aborda automáticamente el socket del paquete
Interfaz de protocolo SOCK_RAW RAW
SOCK_RDM intercambio confiable de mensajes
Socket de paquete de datos secuencial SOCK_SEQPACKET
Toma de corriente SOCK_STREAM
recurso socket_create_listen (puerto entero, acumulación de enteros)
Usar socket_create_listen es un método más simple que socket_create para generar un socket para escuchar. El socket generado escuchará el puerto especificado y el parámetro opcional backlog es establecer el número máximo de conexiones permitidas.
booleano socket_create_pair (familia de enteros, tipo de socket entero, protocolo de entero, identificadores de matriz)
La función socket_create_pair genera un par de conexiones de socket. En primer lugar, los primeros tres parámetros son una descripción de socket_create. El parámetro handles es una matriz que contiene dos recursos de socket. Esta función es una encapsulación de la función socketpair en C.
socket_create_pair
<?php
if(!socket_create_pair(AF_UNIX, SOCK_STREAM, 0, $socket)){
print("¡No se pudieron crear sockets!n");
salida();
}
$niño = pcntl_fork();
si($niño == -1){
print("¡No se pudo bifurcar!n");
salida();
}
elseif($niño > 0){
//padre
socket_close($socket[0]);
print("Padre: esperando mensajen");
$mensaje = socket_read($socket[1], 1024, PHP_NORMAL_READ);
print("Padre: recibió mensaje--$mensajen");
socket_write($socket[1], "¡Hola, proceso hijo!n");
pcntl_waitpid($niño, $estado);
}demás{
//niño
socket_close($socket[1]);
socket_write($socket[0], "¡Hola, proceso principal!n");
print("Niño: esperando mensajen");
$mensaje = socket_read($socket[0], 1024, PHP_NORMAL_READ);
print("Niño: mensaje recibido--$mensajen");
salir(0);
}
?>
valor socket_get_option(socket de recurso, nivel entero, opción entera)
La función socket_get_option devuelve un valor agregado que se enumera en la siguiente tabla. Debe proporcionar un recurso de socket generado por socket_create y un nivel. Este nivel de socket obtenido se puede determinar usando SOL_SOCKET. Como alternativa, utilice un protocolo como SOL_TCP para representar un protocolo TCP. Estas opciones pueden configurarse mediante socket_set_option.
socket_get_options
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
print('SO_BROADCAST: ' .
socket_get_option($socket, SOL_SOCKET,
SO_BROADCAST) "<br>n");
imprimir('SO_DEBUG: '.
socket_get_option($socket, SOL_SOCKET,
SO_DEBUG) "<br>n");
print('SO_DONTROUTE: '.
socket_get_option($socket, SOL_SOCKET,
SO_DONTROUTE) "<br>n");
imprimir('SO_ERROR: '.
socket_get_option($socket, SOL_SOCKET,
SO_ERROR) "<br>n");
print('SO_KEEPALIVE: '.
socket_get_option($socket, SOL_SOCKET,
SO_KEEPALIVE) "<br>n");
imprimir('SO_LINGER: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_LINGER), VERDADERO) "<br>n");
print('SO_OOBINLINE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_OOBINLINE) "<br>n");
imprimir('SO_RCVBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVBUF) "<br>n");
imprimir('SO_RCVLOWAT: ' .
socket_get_option($socket, SOL_SOCKET,
SO_RCVLOWAT) "<br>n");
imprimir('SO_RCVTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_RCVTIMEO), VERDADERO) "<br>n");
print('SO_REUSEADDR: '.
socket_get_option($socket, SOL_SOCKET,
SO_REUSEADDR) "<br>n");
imprimir('SO_SNDBUF: ' .
socket_get_option($socket, SOL_SOCKET,
SO_SNDBUF) "<br>n");
print('SO_SNDLOWAT: '.
socket_get_option($socket, SOL_SOCKET,
SO_SNDLOWAT) "<br>n");
imprimir('SO_SNDTIMEO: ' .
print_r(socket_get_option($socket, SOL_SOCKET,
SO_SNDTIMEO), VERDADERO) "<br>n");
imprimir('SO_TYPE: ' .
socket_get_option($socket, SOL_SOCKET,
SO_TYPE) "<br>n");
?>
Descripción de la opción de la tabla de opciones de socket
SO_BROADCAST permite que los sockets direccionados automáticamente envíen y reciban paquetes de difusión
SO_DEBUG activa la función de depuración de sockets. Solo el root tiene permiso para activar esta opción.
SO_DONTROUTE no acepta paquetes de enrutamiento a través de la puerta de enlace
SO_ERROR Obtiene y borra el último error de socket. Es posible que no sea necesario configurar esta opción.
SO_KEEPALIVE Abrir un mensaje que permanece activo
SO_LINGER Socket_colse y socket_shutdown cancelan el tiempo de espera de envío de mensajes. Esta opción utiliza una matriz, que incluye las dos claves l_onoff y l_linger.
SO_OOBINLINE inserta datos directamente en el búfer de recepción
SO_RCVBUF limita el número máximo de bytes que se pueden almacenar en el buffer
SO_RCVLOWAT retrasa al aceptar un mínimo de datos
SO_RCVTIMEO Retrasa el informe de un tiempo de espera de aceptación, utilizando dos claves de la matriz: sec y usec
SO_REUSEADDR permite la reutilización de direcciones locales
SO_SNDBUF limita el número máximo de bytes del búfer de envío
SO_SNDLOWAT retrasa el envío de datos a este protocolo mientras acepta un mínimo de bytes
SO_SNDTIMEO Retrasa el informe de errores de tiempo de espera cuando un remitente pasa un tiempo de espera. Esta opción utiliza las claves del array: sec y usec
SO_TYPE Obtiene el tipo de socket. Es posible que no sea necesario configurar esta opción.
boolean socket_getpeername (socket de recurso, dirección de cadena, puerto entero).
socket_getpeername obtiene la dirección y el puerto de una conexión especificada. Si la conexión es un socket Unix, se devolverá la ruta al sistema de archivos.
booleano socket_getsockname(socket de recurso, dirección de cadena, puerto entero)
socket_getsockname coloca un nombre en el socket y agrega los parámetros de dirección y puerto. Devuelve falso en caso de error.
(No sé mucho sobre las funciones socket_iovec_* a continuación, así que no me atrevo a traducirlas al azar, así que mantengo el texto original)
booleano socket_iovec_add(recurso iovector, longitud entera)
La función socket_iovec_add agrega un vector de E/S a la matriz de dispersión/reunión.
recurso socket_iovec_alloc(recuento de enteros,…)
La función socket_iovec_alloc devuelve un recurso para manejar una colección de vectores de E/S. El primer argumento especifica el número de vectores. Los siguientes argumentos especifican la longitud de cada vector.
booleano socket_iovec_delete (recurso iovector, posición entera)
La función socket_iovec_delete elimina el vector de E/S en la posición dada.
cadena socket_iovec_fetch (recurso iovector, posición entera)
La función socket_iovec_fetch devuelve el valor del vector especificado en el recurso del vector de E/S.
booleano socket_iovec_free (recurso iovector)
La función socket_iovec_free libera la memoria utilizada para un recurso de vector de E/S.
booleano socket_iovec_set (recurso iovector, posición entera, valor de cadena)
socket_iovec_set establece el valor del vector de E/S en la posición dada.
entero socket_last_error (zócalo de recurso)
La función socket_last_error devuelve el último error generado por cualquier función de socket en la operación. Es posible que haya configurado la opción de socket del recurso de socket en la conexión especificada en la función anterior. La siguiente tabla enumera los códigos de error devueltos. También puede utilizar la función soclet_strerror para obtener errores detallados. Utilice la función socket_clear_error para borrar errores de socket.
Descripción constante de la tabla de códigos de error del socket
Lista de parámetros SOCKET_E2BIG demasiado larga
SOCKET_EACCES no tiene permiso
La dirección SOCKET_EADDRINUSE ya está en uso
SOCKET_EADDRNOTAVAIL no puede resolver la dirección solicitada
Error de transmisión (publicidad) de SOCKET_EADV
SOCKET_EAFNOSUPPORT Protocolo no admitido por la familia de direcciones
El recurso SOCKET_EAGAIN no está disponible temporalmente
La operación SOCKET_EALREADY ya se está ejecutando
SOCKET_EBADE Intercambio no válido
SOCKET_EBADF descriptor de archivo incorrecto
Estado de error del descriptor de archivo SOCKET_EBADFD
Mensaje de error SOCKET_EBADMSG
SOCKET_EBADR Descripción de solicitud no válida
SOCKET_EBADRQC Código de solicitud no válido
SOCKET_EBADSLT Ubicación de operación no válida
SOCKET_EBUSY El controlador o recurso está ocupado
Número de canal SOCKET_ECHRNG fuera de rango
SOCKET_ECOMM Enviar error de comunicación
SOCKET_ECONNABORTED Interrupción del tráfico por motivos de software
Conexión SOCKET_ECONNREFUSED rechazada
SOCKET_ECONNRESET La conexión se restablece por el mismo socket
SOCKET_EDESTADDRREQ debe requerir la dirección de destino
Se superó la cuota de disco SOCKET_EDQUOT
El archivo SOCKET_EEXIST ya existe
SOCKET_EFAULT dirección incorrecta
El host SOCKET_EHOSTDOWN está inactivo
SOCKET_EHOSTUNREACH no está enrutado al host
SOCKET_EIDRM indica que la ID ha sido eliminada
La operación SOCKET_EINPROGRESS se está ejecutando
Llamada al sistema SOCKET_EINTR bloqueada
SOCKET_EINVAL parámetro no válido
Error de entrada/salida SOCKET_EIO
Se ha conectado el terminal de transmisión SOCKET_EISCONN
SOCKET_EISDIR es un directorio
SOCKET_EISNAM es un archivo de tipo especificado
SOCKET_EL2HLT Nivel 2 cancelado
SOCKET_EL2NSYNC Nivel 2 no sincronizado
SOCKET_EL3HLT Nivel 3 cancelado
SOCKET_EL3RST El nivel 3 se restablece
El número de conexión SOCKET_ELNRNG está fuera de rango
SOCKET_ELOOP Demasiados niveles de enlaces simbólicos
SOCKET_EMEDIUMTYPE Tipo de medio incorrecto (tipo intermedio)
SOCKET_EMFILE Demasiados archivos abiertos
SOCKET_EMLINK Demasiadas conexiones
El mensaje SOCKET_EMSGSIZE es demasiado largo
SOCKET_EMULTIHOP Demasiados intentos
Nombre de archivo SOCKET_ENAMETOOLONG demasiado largo
La red SOCKET_ENETDOWN está inactiva
SOCKET_ENETRESET La red se interrumpió y la conexión se restableció.
SOCKET_ENETUNREACHLa red es inaccesible
SOCKET_ENFILE Demasiados archivos abiertos en el sistema
SOCKET_ENOANO Sin polo positivo
SOCKET_ENOBUFS No hay espacio en caché disponible
SOCKET_ENOCSI No hay estructura CSI disponible
SOCKET_ENODATA No hay datos disponibles
SOCKET_ENODEV No existe tal controlador
SOCKET_ENOENT No existe tal archivo o directorio
SOCKET_ENOLCK No hay bloqueo de registro disponible
Conexión SOCKET_ENOLINK a un servicio existente
SOCKET_ENOMEDIUM No se encontró ningún medio
SOCKET_ENOMEM no puede asignar memoria
SOCKET_ENOMSG Ningún tipo de mensaje especificado
El dispositivo SOCKET_ENONET no está en la red
El protocolo SOCKET_ENOPROTOOPT no está disponible
SOCKET_ENOSPC No hay espacio en el disco
SOCKET_ENOSR superó el recurso de transmisión
El controlador SOCKET_ENOSTR no es una secuencia
La función SOCKET_ENOSYS no se ejecuta
Se requiere el controlador de bloque SOCKET_ENOTBLK
SOCKET_ENOTCONN El terminal de transmisión no está conectado
SOCKET_ENOTDIR no tiene un directorio
El directorio SOCKET_ENOTEMPTY está vacío
SOCKET_ENOTSOCK Operación de socket en un no socket
SOCKET_ENOTTY Controlador IO incompatible
El nombre SOCKET_ENOTUNIQ no es único en la red
SOCKET_ENXIO No existe tal controlador ni dirección
La operación SOCKET_EOPNOTSUPP no es compatible
Operación SOCKET_EPERM no permitida
La familia de protocolos SOCKET_EPFNOSUPPORT no es compatible
Tubería fallida de SOCKET_EPIPE
Error de protocolo SOCKET_EPROTO
El protocolo SOCKET_EPROTONOSUPPORT no es compatible
SOCKET_EPROTOTYPE El tipo de error de protocolo en el Socket
La dirección remota SOCKET_EREMCHG ha cambiado
El objeto SOCKET_EREMOTE es remoto
Error de E/S remotas SOCKET_EREMOTEIO
SOCKET_ERESTART La llamada al sistema interrumpida se reiniciará
El sistema de archivos SOCKET_EROFS es de solo lectura
SOCKET_ESHUTDOWN No se puede enviar la interrupción del punto final de transmisión.
SOCKET_ESOCKTNOSUPPORT El tipo de socket no es compatible
SOCKET_ESPIPE búsqueda ilegal
Error de tubería de flujo SOCKET_ESTRPIPE
El temporizador SOCKET_ETIME caduca
Tiempo de espera de conexión SOCKET_ETIMEDOUT
SOCKET_ETOOMANYREFS Demasiadas conexiones para combinar
SOCKET_EUNATCH No se puede adjuntar el controlador de protocolo
SOCKET_EUSERS Demasiados usuarios
El recurso SOCKET_EWOULDBLOCK no está disponible temporalmente
SOCKET_EXDEV Conexión de unidad cruzada no válida
booleano
completo
socket_listen (zócalo de recursos, acumulación de números enteros)
Esta función socket_listen espera conexiones del cliente. El parámetro backlog establece el número máximo de colas permitidas para esperar conexiones.
cadena socket_read(socket de recurso, longitud de entero, tipo de entero)
La función socket_read lee los bytes especificados de un socket específico y devuelve falso si hay un error. De forma predeterminada, se utiliza el modo de lectura binaria segura. Puede cambiar el modo de lectura configurando externamente el parámetro de tipo en PHP_BINARY_READ. También puede establecer el tipo en PHP_NORMAL_READ.
booleano socket_readv(socket de recurso, iovector de recurso)
La función socket_readv inserta los datos leídos en el recurso iovector.
entero socket_recv (zócalo de recursos, búfer de cadena, longitud de entero, indicadores de entero)
La función socket_recv lee datos y los inserta en el búfer. El parámetro Longitud establece el número máximo de bytes para leer y el parámetro de bandera puede usar MSG_OOB o MSG_PEEK. La función devuelve el número de bytes leídos.
entero socket_recvfrom (zócalo de recursos, búfer de cadena, longitud de entero, host de cadena, puerto de entero)
La función socket_frcvfrom lee datos y los inserta en el caché. El parámetro Longitud establece el número máximo de bytes que se permite recibir. El parámetro de banderas se puede configurar en MSG_OOB o MSG_PEEK. PHP establece los parámetros del host y del puerto en valores apropiados para poder obtener los datos enviados desde el host.
boolean socket_recvmsg(socket de recursos, iovector de recursos, control de matriz, longitud de entero, indicadores de entero, host de cadena, puerto de entero)
La función socket_recvmsg lee datos del socket y los inserta en un recurso de vector de E/S. El parámetro de control de configuración de PHP es una matriz asociativa con tres elementos: cmsg_level, cmsg_type y cmsg_data. El parámetro Longitud es un parámetro de longitud adjunto a los datos sobre la obtención de los datos. El parámetro Flags establece los valores permitidos y los valores de retorno. Al momento de escribir este artículo, PHP no puede ejecutar todas las constantes de salida. PHP establece los parámetros del host y del puerto en los valores apropiados para obtener los datos enviados desde el host remoto.
(La función Socket_slect no está traducida porque me temo que las palabras no transmiten el significado)
entero socket_select(lectura de matriz, escritura de matriz, excepción de matriz, tiempo de espera de entero_segundos, tiempo de espera de entero_microsegundos)
La función socket_select espera cambios en los sockets. PHP observa los sockets proporcionados en la matriz de lectura para detectar nuevos datos que ingresan. PHP observa las secuencias proporcionadas en la matriz de escritura para estar listas para aceptar más datos. para errores Si pasa el número de segundos especificado en el argumento timeout_segundos, la función devuelve Utilice el argumento opcional timeout_microsegundos para especificar un tiempo de espera inferior a 1 segundo.
La función socket_select devuelve el número de sockets que cambiaron o FALSO si se produjo un error. Si se agotó el tiempo de espera de la llamada, esta función también modifica las matrices dadas para que incluyan solo aquellos sockets que cambiaron.
Si no tiene sockets de un tipo particular para monitorear, puede pasar una matriz vacía o una variable configurada en NULL.
entero socket_send (socket de recursos, búfer de cadena, longitud de entero, indicadores de entero)
La función socket_send escribe datos en el búfer y luego los inserta en la conexión. Debe especificar un número máximo de bytes grabables para el búfer. También puede configurar el parámetro flags en vacío o en una de las siguientes constantes combinadas: MSG_DONTROUTE y MSG_OOB. La función finaliza y devuelve el número de bytes escritos; de lo contrario, devuelve falso.
boolean socket_sendmsg(socket de recursos, iovector de recursos, indicadores de enteros, dirección de cadena, puerto de enteros)
socket_sendmsg intenta enviar datos a un socket. Es adecuado para enchufes sin conexión. El parámetro Iovector es un recurso generado por la función socket_iovec_alloc. Debe especificar el parámetro flags como: NULL, MSG_DONTROUTE, MSG_OOB o dos constantes combinadas. Debe especificar una dirección y un puerto para las solicitudes de Internet.
La función Socket_sendmsg devuelve verdadero al enviar datos, pero no hay garantía de que los datos lleguen.
entero socket_sendto (socket de recursos, búfer de cadena, longitud de entero, indicadores de entero, dirección de cadena, puerto de entero)
La función socket_sendto intenta escribir datos en el búfer y enviarlos a un socket. Es adecuado para la mayoría de enchufes sin conexión. Debe especificar indicadores como: NULL, MSG_DONTROUTE, MSG_OOB o una combinación de dos constantes. También debe especificar la dirección y un puerto solicitado.
La función Socket_sendto devuelve verdadero cuando se envían datos, pero no hay garantía de que los datos lleguen.
booleano socket_set_block(zócalo de recurso)
La función socket_set_block configura el socket en modo de bloque, que es el modo predeterminado. En el modo de bloque, las operaciones de E/S se realizan cuando se completa una solicitud.
booleano socket_set_nonblock (zócalo de recurso)
La función socket_set_nonblock configura el socket para que se inserte en cualquier modo sin bloque. En el modo sin bloqueo, las operaciones de E/S regresan inmediatamente, incluso si no hay datos.
booleano socket_set_option(socket de recurso, nivel entero, opción entera, valor entero)
La función socket_set_option establece una opción para el socket. El parámetro Nivel establece una constante que marca el nivel. Los valores válidos incluyen: SOL_SOCKET, SOL_TCP y SOL_UDP. Los parámetros de Opción deben coincidir con las constantes en la tabla de opciones de Socket anterior.
booleano socket_shutdown(socket de recursos, entero cómo)
La función socket_shutdown cierra un socket para E/S. Configurar cómo en 0 dejará de recibir datos, configurarlo en 1 dejará de enviar datos y configurarlo en 2 detendrá ambas operaciones.
cadena socket_strerror (error de número entero)
La función socket_strerror devuelve un número de error e información detallada del error.
entero socket_write (zócalo de recurso, búfer de cadena, longitud entera)
La función socket_write escribe datos en el búfer y luego los envía al socket. Puede especificar el parámetro de longitud para especificar el número máximo de bytes en el búfer. Esta función suele ser más conveniente que socket_send.
booleano socket_writev(socket de recurso, iovector de recurso)
La función socket_writev escribe datos en un socket a través de vectores de E/S.