Skip to content

Red

[Estable: 2 - Estable]

Estable: 2 Estabilidad: 2 - Estable

Código fuente: lib/net.js

El módulo node:net proporciona una API de red asíncrona para crear servidores TCP o IPC basados en flujos (net.createServer()) y clientes (net.createConnection()).

Se puede acceder utilizando:

js
import net from 'node:net'
js
const net = require('node:net')

Soporte IPC

[Historial]

VersiónCambios
v20.8.0Soporte para enlazar a una ruta de socket de dominio Unix abstracta como \0abstract. Podemos enlazar '\0' para Node.js \< v20.4.0.

El módulo node:net admite IPC con tuberías con nombre en Windows y sockets de dominio Unix en otros sistemas operativos.

Identificación de rutas para conexiones IPC

net.connect(), net.createConnection(), server.listen() y socket.connect() toman un parámetro path para identificar los puntos finales de IPC.

En Unix, el dominio local también se conoce como dominio Unix. La ruta es un nombre de ruta del sistema de archivos. Generará un error cuando la longitud del nombre de ruta sea mayor que la longitud de sizeof(sockaddr_un.sun_path). Los valores típicos son 107 bytes en Linux y 103 bytes en macOS. Si una abstracción de API de Node.js crea el socket de dominio Unix, también desenlazará el socket de dominio Unix. Por ejemplo, net.createServer() puede crear un socket de dominio Unix y server.close() lo desenlazará. Pero si un usuario crea el socket de dominio Unix fuera de estas abstracciones, el usuario deberá eliminarlo. Lo mismo se aplica cuando una API de Node.js crea un socket de dominio Unix pero el programa luego falla. En resumen, un socket de dominio Unix será visible en el sistema de archivos y persistirá hasta que se desenlace. En Linux, puede usar un socket abstracto de Unix agregando \0 al comienzo de la ruta, como \0abstract. La ruta al socket abstracto de Unix no es visible en el sistema de archivos y desaparecerá automáticamente cuando se cierren todas las referencias abiertas al socket.

En Windows, el dominio local se implementa utilizando una tubería con nombre. La ruta debe hacer referencia a una entrada en \\?\pipe\ o \\.\pipe\. Se permite cualquier carácter, pero este último puede realizar algún procesamiento de nombres de tuberías, como resolver secuencias ... A pesar de cómo podría verse, el espacio de nombres de la tubería es plano. Las tuberías no persistirán. Se eliminan cuando se cierra la última referencia a ellas. A diferencia de los sockets de dominio Unix, Windows cerrará y eliminará la tubería cuando finalice el proceso propietario.

El escape de cadenas de JavaScript requiere que las rutas se especifiquen con un escape de barra invertida adicional como:

js
net.createServer().listen(path.join('\\\\?\\pipe', process.cwd(), 'myctl'))

Clase: net.BlockList

Agregado en: v15.0.0, v14.18.0

El objeto BlockList puede utilizarse con algunas API de red para especificar reglas para deshabilitar el acceso entrante o saliente a direcciones IP específicas, rangos IP o subredes IP.

blockList.addAddress(address[, type])

Agregado en: v15.0.0, v14.18.0

Agrega una regla para bloquear la dirección IP dada.

blockList.addRange(start, end[, type])

Agregado en: v15.0.0, v14.18.0

Agrega una regla para bloquear un rango de direcciones IP desde start (inclusive) hasta end (inclusive).

blockList.addSubnet(net, prefix[, type])

Agregado en: v15.0.0, v14.18.0

  • net <string> | <net.SocketAddress> La dirección de red IPv4 o IPv6.
  • prefix <number> El número de bits de prefijo CIDR. Para IPv4, este debe ser un valor entre 0 y 32. Para IPv6, debe estar entre 0 y 128.
  • type <string> Ya sea 'ipv4' o 'ipv6'. Predeterminado: 'ipv4'.

Agrega una regla para bloquear un rango de direcciones IP especificado como una máscara de subred.

blockList.check(address[, type])

Agregado en: v15.0.0, v14.18.0

Devuelve true si la dirección IP dada coincide con alguna de las reglas agregadas a la BlockList.

js
const blockList = new net.BlockList()
blockList.addAddress('123.123.123.123')
blockList.addRange('10.0.0.1', '10.0.0.10')
blockList.addSubnet('8592:757c:efae:4e45::', 64, 'ipv6')

console.log(blockList.check('123.123.123.123')) // Imprime: true
console.log(blockList.check('10.0.0.3')) // Imprime: true
console.log(blockList.check('222.111.111.222')) // Imprime: false

// La notación IPv6 para direcciones IPv4 funciona:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')) // Imprime: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')) // Imprime: true

blockList.rules

Agregado en: v15.0.0, v14.18.0

La lista de reglas agregadas a la lista de bloqueo.

BlockList.isBlockList(value)

Agregado en: v23.4.0

  • value <any> Cualquier valor JS
  • Devuelve true si value es una net.BlockList.

Clase: net.SocketAddress

Agregado en: v15.14.0, v14.18.0

new net.SocketAddress([options])

Agregado en: v15.14.0, v14.18.0

  • options <Objeto>
    • address <string> La dirección de red como una cadena IPv4 o IPv6. Predeterminado: '127.0.0.1' si family es 'ipv4'; '::' si family es 'ipv6'.
    • family <string> Uno de 'ipv4' o 'ipv6'. Predeterminado: 'ipv4'.
    • flowlabel <número> Una etiqueta de flujo IPv6 utilizada solo si family es 'ipv6'.
    • port <número> Un puerto IP.

socketaddress.address

Agregado en: v15.14.0, v14.18.0

socketaddress.family

Agregado en: v15.14.0, v14.18.0

socketaddress.flowlabel

Agregado en: v15.14.0, v14.18.0

socketaddress.port

Agregado en: v15.14.0, v14.18.0

SocketAddress.parse(input)

Agregado en: v23.4.0

  • input <string> Una cadena de entrada que contiene una dirección IP y un puerto opcional, p. ej., 123.1.2.3:1234 o [1::1]:1234.
  • Devuelve: <net.SocketAddress> Devuelve un SocketAddress si el análisis se realizó correctamente. De lo contrario, devuelve undefined.

Clase: net.Server

Añadido en: v0.1.90

Esta clase se utiliza para crear un servidor TCP o IPC.

new net.Server([opciones][, connectionListener])

net.Server es un EventEmitter con los siguientes eventos:

Evento: 'close'

Añadido en: v0.5.0

Emitido cuando el servidor se cierra. Si existen conexiones, este evento no se emite hasta que todas las conexiones finalicen.

Evento: 'connection'

Añadido en: v0.1.90

Emitido cuando se realiza una nueva conexión. socket es una instancia de net.Socket.

Evento: 'error'

Agregado en: v0.1.90

Se emite cuando ocurre un error. A diferencia de net.Socket, el evento 'close' no se emitirá directamente después de este evento a menos que se llame manualmente a server.close(). Consulte el ejemplo en la discusión de server.listen().

Evento: 'listening'

Agregado en: v0.1.90

Se emite cuando el servidor se ha enlazado después de llamar a server.listen().

Evento: 'drop'

Agregado en: v18.6.0, v16.17.0

Cuando el número de conexiones alcanza el umbral de server.maxConnections, el servidor descartará las nuevas conexiones y emitirá el evento 'drop' en su lugar. Si es un servidor TCP, el argumento es el siguiente, de lo contrario, el argumento es undefined.

  • data <Object> El argumento pasado al listener del evento.

server.address()

[Historial]

VersiónCambios
v18.4.0La propiedad family ahora devuelve una cadena en lugar de un número.
v18.0.0La propiedad family ahora devuelve un número en lugar de una cadena.
v0.1.90Añadido en: v0.1.90

Devuelve la dirección enlazada, el nombre de la familia de la dirección y el puerto del servidor según lo informado por el sistema operativo si está escuchando en un socket IP (útil para encontrar qué puerto se asignó al obtener una dirección asignada por el sistema operativo): { port: 12346, family: 'IPv4', address: '127.0.0.1' }.

Para un servidor que escucha en una tubería o socket de dominio Unix, el nombre se devuelve como una cadena.

js
const server = net
  .createServer(socket => {
    socket.end('adiós\n')
  })
  .on('error', err => {
    // Manejar errores aquí.
    throw err
  })

// Tomar un puerto no utilizado arbitrario.
server.listen(() => {
  console.log('servidor abierto en', server.address())
})

server.address() devuelve null antes de que se haya emitido el evento 'listening' o después de llamar a server.close().

server.close([callback])

Agregado en: v0.1.90

Impide que el servidor acepte nuevas conexiones y mantiene las conexiones existentes. Esta función es asíncrona, el servidor se cierra finalmente cuando todas las conexiones terminan y el servidor emite un evento 'close'. La callback opcional se llamará una vez que ocurra el evento 'close'. A diferencia de ese evento, se llamará con un Error como su único argumento si el servidor no estaba abierto cuando se cerró.

server[Symbol.asyncDispose]()

Agregado en: v20.5.0, v18.18.0

[Estable: 1 - Experimental]

Estable: 1 Estabilidad: 1 - Experimental

Llama a server.close() y devuelve una promesa que se cumple cuando el servidor se ha cerrado.

server.getConnections(callback)

Añadido en: v0.9.7

Obtiene de forma asíncrona el número de conexiones simultáneas en el servidor. Funciona cuando los sockets se enviaron a bifurcaciones.

La devolución de llamada debe tomar dos argumentos err y count.

server.listen()

Inicia un servidor escuchando las conexiones. Un net.Server puede ser un servidor TCP o un servidor IPC dependiendo de lo que escuche.

Posibles firmas:

Esta función es asíncrona. Cuando el servidor comienza a escuchar, se emitirá el evento 'listening'. El último parámetro callback se agregará como un receptor para el evento 'listening'.

Todos los métodos listen() pueden tomar un parámetro backlog para especificar la longitud máxima de la cola de conexiones pendientes. La longitud real será determinada por el sistema operativo a través de configuraciones sysctl como tcp_max_syn_backlog y somaxconn en Linux. El valor predeterminado de este parámetro es 511 (no 512).

Todos los net.Socket se establecen en SO_REUSEADDR (consulte socket(7) para obtener detalles).

El método server.listen() se puede llamar de nuevo si y solo si hubo un error durante la primera llamada a server.listen() o se ha llamado a server.close(). De lo contrario, se lanzará un error ERR_SERVER_ALREADY_LISTEN.

Uno de los errores más comunes que se generan al escuchar es EADDRINUSE. Esto sucede cuando otro servidor ya está escuchando en el puerto/ruta/controlador solicitado. Una forma de manejar esto sería volver a intentarlo después de un cierto tiempo:

js
server.on('error', e => {
  if (e.code === 'EADDRINUSE') {
    console.error('Dirección en uso, reintentando...')
    setTimeout(() => {
      server.close()
      server.listen(PORT, HOST)
    }, 1000)
  }
})

server.listen(handle[, backlog][, callback])

Agregado en: v0.5.10

Inicia un servidor escuchando conexiones en un handle dado que ya se ha vinculado a un puerto, un socket de dominio Unix o una tubería con nombre de Windows.

El objeto handle puede ser un servidor, un socket (cualquier cosa con un miembro _handle subyacente) o un objeto con un miembro fd que sea un descriptor de archivo válido.

La escucha en un descriptor de archivo no es compatible con Windows.

server.listen(options[, callback])

[Historial]

VersiónCambios
v23.1.0Se admite la opción reusePort.
v15.6.0Se agregó la compatibilidad con AbortSignal.
v11.4.0Se admite la opción ipv6Only.
v0.11.14Agregado en: v0.11.14
  • options <Objeto> Obligatorio. Admite las siguientes propiedades:

    • backlog <número> Parámetro común de las funciones server.listen().
    • exclusive <booleano> Predeterminado: false
    • host <cadena>
    • ipv6Only <booleano> Para servidores TCP, establecer ipv6Only en true deshabilitará la compatibilidad con pila doble, es decir, la vinculación al host :: no hará que 0.0.0.0 se vincule. Predeterminado: false.
    • reusePort <booleano> Para servidores TCP, establecer reusePort en true permite que varios sockets en el mismo host se vinculen al mismo puerto. Las conexiones entrantes son distribuidas por el sistema operativo a los sockets de escucha. Esta opción solo está disponible en algunas plataformas, como Linux 3.9+, DragonFlyBSD 3.6+, FreeBSD 12.0+, Solaris 11.4 y AIX 7.2.5+. Predeterminado: false.
    • path <cadena> Se ignorará si se especifica port. Consulte Identificación de rutas para conexiones IPC.
    • port <número>
    • readableAll <booleano> Para los servidores IPC, hace que la tubería sea legible para todos los usuarios. Predeterminado: false.
    • signal <AbortSignal> Un AbortSignal que se puede usar para cerrar un servidor de escucha.
    • writableAll <booleano> Para los servidores IPC, hace que la tubería se pueda escribir para todos los usuarios. Predeterminado: false.
  • callback <Función> funciones.

  • Devuelve: <net.Server>

Si se especifica port, se comporta igual que server.listen([port[, host[, backlog]]][, callback]). De lo contrario, si se especifica path, se comporta igual que server.listen(path[, backlog][, callback]). Si no se especifica ninguno de ellos, se generará un error.

Si exclusive es false (predeterminado), entonces los workers del clúster usarán el mismo handle subyacente, lo que permitirá que se compartan las tareas de manejo de conexiones. Cuando exclusive es true, el handle no se comparte y el intento de compartir el puerto resulta en un error. A continuación, se muestra un ejemplo que escucha en un puerto exclusivo.

js
server.listen({
  host: 'localhost',
  port: 80,
  exclusive: true,
})

Cuando exclusive es true y el handle subyacente se comparte, es posible que varios workers consulten un handle con diferentes backlogs. En este caso, se utilizará el primer backlog pasado al proceso maestro.

Iniciar un servidor IPC como root puede hacer que la ruta del servidor sea inaccesible para los usuarios no privilegiados. El uso de readableAll y writableAll hará que el servidor sea accesible para todos los usuarios.

Si la opción signal está habilitada, llamar a .abort() en el AbortController correspondiente es similar a llamar a .close() en el servidor:

js
const controller = new AbortController()
server.listen({
  host: 'localhost',
  port: 80,
  signal: controller.signal,
})
// Más tarde, cuando desee cerrar el servidor.
controller.abort()

server.listen(path[, backlog][, callback])

Agregado en: v0.1.90

Inicia un servidor IPC que escucha conexiones en la ruta dada.

server.listen([port[, host[, backlog]]][, callback])

Agregado en: v0.1.90

Inicia un servidor TCP que escucha conexiones en el puerto y host dados.

Si se omite port o es 0, el sistema operativo asignará un puerto arbitrario no utilizado, que se puede recuperar usando server.address().port después de que se haya emitido el evento 'listening'.

Si se omite host, el servidor aceptará conexiones en la dirección IPv6 no especificada (::) cuando IPv6 esté disponible, o la dirección IPv4 no especificada (0.0.0.0) de lo contrario.

En la mayoría de los sistemas operativos, escuchar la dirección IPv6 no especificada (::) puede hacer que net.Server también escuche en la dirección IPv4 no especificada (0.0.0.0).

server.listening

Agregado en: v5.7.0

  • <boolean> Indica si el servidor está escuchando o no conexiones.

server.maxConnections

[Historial]

VersiónCambios
v21.0.0Establecer maxConnections a 0 descarta todas las conexiones entrantes. Anteriormente, se interpretaba como Infinity.
v0.2.0Agregado en: v0.2.0

Cuando el número de conexiones alcanza el umbral server.maxConnections:

No se recomienda utilizar esta opción una vez que se ha enviado un socket a un hijo con child_process.fork().

server.dropMaxConnection

Agregado en: v23.1.0

Establezca esta propiedad en true para comenzar a cerrar las conexiones una vez que el número de conexiones alcance el umbral [server.maxConnections][]. Esta configuración solo es efectiva en modo clúster.

server.ref()

Agregado en: v0.9.1

Opuesto a unref(), llamar a ref() en un servidor previamente unref no impedirá que el programa finalice si es el único servidor restante (el comportamiento predeterminado). Si el servidor tiene ref, volver a llamar a ref() no tendrá ningún efecto.

server.unref()

Agregado en: v0.9.1

Llamar a unref() en un servidor permitirá que el programa finalice si este es el único servidor activo en el sistema de eventos. Si el servidor ya tiene unref, volver a llamar a unref() no tendrá ningún efecto.

Clase: net.Socket

Agregado en: v0.3.4

Esta clase es una abstracción de un socket TCP o un punto final de transmisión IPC (utiliza tuberías con nombre en Windows y sockets de dominio Unix en otros casos). También es un EventEmitter.

Un net.Socket puede ser creado por el usuario y utilizado directamente para interactuar con un servidor. Por ejemplo, es devuelto por net.createConnection(), por lo que el usuario puede usarlo para comunicarse con el servidor.

También puede ser creado por Node.js y pasado al usuario cuando se recibe una conexión. Por ejemplo, se pasa a los listeners de un evento 'connection' emitido en un net.Server, para que el usuario pueda usarlo para interactuar con el cliente.

new net.Socket([options])

[Historial]

VersiónCambios
v15.14.0Se añadió soporte para AbortSignal.
v12.10.0Se añadió la opción onread.
v0.3.4Añadido en: v0.3.4
  • options <Objeto> Las opciones disponibles son:

    • allowHalfOpen <booleano> Si se establece en false, el socket finalizará automáticamente el lado de escritura cuando finalice el lado de lectura. Consulta net.createServer() y el evento 'end' para obtener más detalles. Predeterminado: false.
    • fd <número> Si se especifica, encapsula un socket existente con el descriptor de archivo dado; de lo contrario, se creará un socket nuevo.
    • onread <Objeto> Si se especifica, los datos entrantes se almacenan en un único buffer y se pasan al callback suministrado cuando llegan datos al socket. Esto hará que la funcionalidad de transmisión no proporcione ningún dato. El socket emitirá eventos como 'error', 'end' y 'close' como de costumbre. Los métodos como pause() y resume() también se comportarán como se espera.
    • buffer <Buffer> | <Uint8Array> | <Función> Ya sea un fragmento reutilizable de memoria para usar para almacenar datos entrantes o una función que devuelve dicho fragmento.
    • callback <Función> Esta función se llama para cada fragmento de datos entrantes. Se le pasan dos argumentos: el número de bytes escritos en buffer y una referencia a buffer. Devuelve false desde esta función para pause() el socket implícitamente. Esta función se ejecutará en el contexto global.
    • readable <booleano> Permite lecturas en el socket cuando se pasa un fd; de lo contrario, se ignora. Predeterminado: false.
    • signal <AbortSignal> Una señal de Abort que se puede usar para destruir el socket.
    • writable <booleano> Permite escrituras en el socket cuando se pasa un fd; de lo contrario, se ignora. Predeterminado: false.
  • Devuelve: <net.Socket>

Crea un nuevo objeto de socket.

El socket recién creado puede ser un socket TCP o un punto final IPC de transmisión, según a qué se connect().

Event: 'close'

Agregado en: v0.1.90

  • hadError <boolean> true si el socket tuvo un error de transmisión.

Se emite una vez que el socket está completamente cerrado. El argumento hadError es un booleano que indica si el socket se cerró debido a un error de transmisión.

Event: 'connect'

Agregado en: v0.1.90

Se emite cuando se establece correctamente una conexión de socket. Ver net.createConnection().

Event: 'connectionAttempt'

Agregado en: v21.6.0, v20.12.0

  • ip <string> La IP a la que el socket está intentando conectarse.
  • port <number> El puerto al que el socket está intentando conectarse.
  • family <number> La familia de la IP. Puede ser 6 para IPv6 o 4 para IPv4.

Se emite cuando se inicia un nuevo intento de conexión. Esto puede emitirse varias veces si el algoritmo de selección automática de familia está habilitado en socket.connect(options).

Evento: 'connectionAttemptFailed'

Agregado en: v21.6.0, v20.12.0

  • ip <string> La IP a la que el socket intentó conectarse.
  • port <number> El puerto al que el socket intentó conectarse.
  • family <number> La familia de la IP. Puede ser 6 para IPv6 o 4 para IPv4.
  • error <Error> El error asociado con el fallo.

Emitido cuando falla un intento de conexión. Esto puede emitirse varias veces si el algoritmo de autoselección de familia está habilitado en socket.connect(options).

Evento: 'connectionAttemptTimeout'

Agregado en: v21.6.0, v20.12.0

  • ip <string> La IP a la que el socket intentó conectarse.
  • port <number> El puerto al que el socket intentó conectarse.
  • family <number> La familia de la IP. Puede ser 6 para IPv6 o 4 para IPv4.

Emitido cuando un intento de conexión agota el tiempo de espera. Esto solo se emite (y puede emitirse varias veces) si el algoritmo de autoselección de familia está habilitado en socket.connect(options).

Evento: 'data'

Agregado en: v0.1.90

Emitido cuando se reciben datos. El argumento data será un Buffer o una String. La codificación de los datos se establece mediante socket.setEncoding().

Los datos se perderán si no hay un listener cuando un Socket emite un evento 'data'.

Evento: 'drain'

Agregado en: v0.1.90

Emitido cuando el búfer de escritura se vacía. Puede utilizarse para limitar las subidas.

Ver también: los valores de retorno de socket.write().

Evento: 'end'

Agregado en: v0.1.90

Emitido cuando el otro extremo del socket señala el final de la transmisión, terminando así el lado legible del socket.

Por defecto (allowHalfOpen es false), el socket enviará un paquete de fin de transmisión de vuelta y destruirá su descriptor de archivo una vez que haya escrito su cola de escritura pendiente. Sin embargo, si allowHalfOpen está establecido en true, el socket no hará automáticamente end() en su lado de escritura, permitiendo al usuario escribir cantidades arbitrarias de datos. El usuario debe llamar a end() explícitamente para cerrar la conexión (es decir, enviar un paquete FIN de vuelta).

Evento: 'error'

Añadido en: v0.1.90

Emitido cuando ocurre un error. El evento 'close' será llamado directamente después de este evento.

Evento: 'lookup'

[Historial]

VersiónCambios
v5.10.0El parámetro host ahora es compatible.
v0.11.3Añadido en: v0.11.3

Emitido después de resolver el nombre de host pero antes de conectar. No aplicable a sockets Unix.

Evento: 'ready'

Agregado en: v9.11.0

Se emite cuando un socket está listo para ser usado.

Se activa inmediatamente después de 'connect'.

Evento: 'timeout'

Agregado en: v0.1.90

Se emite si el socket excede el tiempo de espera por inactividad. Esto es solo para notificar que el socket ha estado inactivo. El usuario debe cerrar la conexión manualmente.

Ver también: socket.setTimeout().

socket.address()

[Historial]

VersiónCambios
v18.4.0La propiedad family ahora devuelve una cadena en lugar de un número.
v18.0.0La propiedad family ahora devuelve un número en lugar de una cadena.
v0.1.90Agregado en: v0.1.90

Devuelve la dirección enlazada, el nombre de la familia de la dirección y el puerto del socket según lo informado por el sistema operativo: { port: 12346, family: 'IPv4', address: '127.0.0.1' }

socket.autoSelectFamilyAttemptedAddresses

Agregado en: v19.4.0, v18.18.0

Esta propiedad solo está presente si el algoritmo de selección automática de familias está habilitado en socket.connect(options) y es un array de las direcciones que se han intentado.

Cada dirección es una cadena con el formato $IP:$PORT. Si la conexión fue exitosa, entonces la última dirección es a la que está conectado actualmente el socket.

socket.bufferSize

Añadido en: v0.3.8

Obsoleto desde: v14.6.0

[Estable: 0 - Obsoleto]

Estable: 0 Estabilidad: 0 - Obsoleto: Utilice writable.writableLength en su lugar.

Esta propiedad muestra la cantidad de caracteres almacenados en búfer para escritura. El búfer puede contener cadenas cuya longitud después de la codificación aún no se conoce. Por lo tanto, este número es solo una aproximación de la cantidad de bytes en el búfer.

net.Socket tiene la propiedad de que socket.write() siempre funciona. Esto es para ayudar a los usuarios a ponerse en marcha rápidamente. El ordenador no siempre puede seguir el ritmo de la cantidad de datos que se escriben en un socket. La conexión de red simplemente podría ser demasiado lenta. Node.js pondrá en cola internamente los datos escritos en un socket y los enviará a través de la red cuando sea posible.

La consecuencia de este almacenamiento en búfer interno es que la memoria puede crecer. Los usuarios que experimenten bufferSize grande o creciente deberían intentar "limitar" los flujos de datos en su programa con socket.pause() y socket.resume().

socket.bytesRead

Agregado en: v0.5.3

La cantidad de bytes recibidos.

socket.bytesWritten

Agregado en: v0.5.3

La cantidad de bytes enviados.

socket.connect()

Inicia una conexión en un socket dado.

Posibles firmas:

Esta función es asíncrona. Cuando se establece la conexión, se emitirá el evento 'connect'. Si hay un problema al conectar, en lugar de un evento 'connect', se emitirá un evento 'error' con el error pasado al receptor de 'error'. El último parámetro connectListener, si se proporciona, se añadirá como un receptor para el evento 'connect' una vez.

Esta función solo debe utilizarse para reconectar un socket después de que se haya emitido 'close' o de lo contrario puede conducir a un comportamiento indefinido.

socket.connect(options[, connectListener])

[Historial]

VersiónCambios
v19.4.0El valor predeterminado para la opción autoSelectFamily se puede cambiar en tiempo de ejecución usando setDefaultAutoSelectFamily o a través de la opción de línea de comandos --enable-network-family-autoselection.
v20.0.0, v18.18.0El valor predeterminado para la opción autoSelectFamily ahora es verdadero. El indicador CLI --enable-network-family-autoselection ha cambiado de nombre a --network-family-autoselection. El nombre antiguo ahora es un alias, pero se desaconseja.
v19.3.0, v18.13.0Se agregó la opción autoSelectFamily.
v17.7.0, v16.15.0Ahora se admiten las opciones noDelay, keepAlive y keepAliveInitialDelay.
v6.0.0La opción hints ahora tiene como valor predeterminado 0 en todos los casos. Anteriormente, en ausencia de la opción family, tenía como valor predeterminado `dns.ADDRCONFIG
v5.11.0Ahora se admite la opción hints.
v0.1.90Agregado en: v0.1.90

Inicia una conexión en un socket dado. Normalmente, este método no es necesario, el socket debe crearse y abrirse con net.createConnection(). Use esto solo cuando implemente un Socket personalizado.

Para conexiones TCP, las options disponibles son:

  • autoSelectFamily <boolean>: Si se establece en true, habilita un algoritmo de autodetección de familia que implementa libremente la sección 5 de RFC 8305. La opción all pasada a la búsqueda se establece en true y los sockets intentan conectarse a todas las direcciones IPv6 e IPv4 obtenidas, en secuencia, hasta que se establece una conexión. La primera dirección AAAA devuelta se intenta primero, luego la primera dirección A devuelta, luego la segunda dirección AAAA devuelta y así sucesivamente. A cada intento de conexión (pero al último) se le da la cantidad de tiempo especificada por la opción autoSelectFamilyAttemptTimeout antes de que se agote el tiempo y se intente la siguiente dirección. Se ignora si la opción family no es 0 o si se establece localAddress. Los errores de conexión no se emiten si al menos una conexión tiene éxito. Si todos los intentos de conexión fallan, se emite un único AggregateError con todos los intentos fallidos. Predeterminado: net.getDefaultAutoSelectFamily().
  • autoSelectFamilyAttemptTimeout <number>: La cantidad de tiempo en milisegundos para esperar a que finalice un intento de conexión antes de intentar la siguiente dirección cuando se utiliza la opción autoSelectFamily. Si se establece en un entero positivo menor que 10, entonces se usará el valor 10 en su lugar. Predeterminado: net.getDefaultAutoSelectFamilyAttemptTimeout().
  • family <number>: Versión de la pila IP. Debe ser 4, 6 o 0. El valor 0 indica que se permiten tanto las direcciones IPv4 como IPv6. Predeterminado: 0.
  • hints <number> Opcional dns.lookup() sugerencias.
  • host <string> Host al que debe conectarse el socket. Predeterminado: 'localhost'.
  • keepAlive <boolean> Si se establece en true, habilita la funcionalidad keep-alive en el socket inmediatamente después de que se establece la conexión, de manera similar a lo que se hace en socket.setKeepAlive(). Predeterminado: false.
  • keepAliveInitialDelay <number> Si se establece en un número positivo, establece el retraso inicial antes de que se envíe la primera sonda keepalive en un socket inactivo. Predeterminado: 0.
  • localAddress <string> Dirección local desde la que debe conectarse el socket.
  • localPort <number> Puerto local desde el que debe conectarse el socket.
  • lookup <Function> Función de búsqueda personalizada. Predeterminado: dns.lookup().
  • noDelay <boolean> Si se establece en true, deshabilita el uso del algoritmo de Nagle inmediatamente después de que se establece el socket. Predeterminado: false.
  • port <number> Requerido. Puerto al que debe conectarse el socket.
  • blockList <net.BlockList> blockList se puede utilizar para deshabilitar el acceso saliente a direcciones IP específicas, rangos de IP o subredes de IP.

Para conexiones IPC, las options disponibles son:

socket.connect(path[, connectListener])

Inicia una conexión IPC en el socket dado.

Alias de socket.connect(options[, connectListener]) llamado con { path: path } como options.

socket.connect(port[, host][, connectListener])

Agregado en: v0.1.90

Inicia una conexión TCP en el socket dado.

Alias de socket.connect(options[, connectListener]) llamado con {port: port, host: host} como options.

socket.connecting

Agregado en: v6.1.0

Si es true, se llamó a socket.connect(options[, connectListener]) y aún no ha terminado. Se mantendrá como true hasta que el socket se conecte, luego se establece en false y se emite el evento 'connect'. Ten en cuenta que la función de devolución de llamada socket.connect(options[, connectListener]) es un listener para el evento 'connect'.

socket.destroy([error])

Agregado en: v0.1.90

Asegura que no ocurra más actividad de E/S en este socket. Destruye el stream y cierra la conexión.

Consulta writable.destroy() para más detalles.

socket.destroyed

  • <boolean> Indica si la conexión está destruida o no. Una vez que una conexión se destruye, no se pueden transferir más datos a través de ella.

Consulta writable.destroyed para más detalles.

socket.destroySoon()

Añadido en: v0.3.4

Destruye el socket después de que todos los datos se han escrito. Si el evento 'finish' ya se emitió, el socket se destruye de inmediato. Si el socket todavía es grabable, implícitamente llama a socket.end().

socket.end([data[, encoding]][, callback])

Añadido en: v0.1.90

Cierra el socket a la mitad. Es decir, envía un paquete FIN. Es posible que el servidor aún envíe algunos datos.

Consulta writable.end() para obtener más detalles.

socket.localAddress

Agregado en: v0.9.6

La representación en cadena de la dirección IP local a la que se está conectando el cliente remoto. Por ejemplo, en un servidor que escucha en '0.0.0.0', si un cliente se conecta en '192.168.1.1', el valor de socket.localAddress sería '192.168.1.1'.

socket.localPort

Agregado en: v0.9.6

La representación numérica del puerto local. Por ejemplo, 80 o 21.

socket.localFamily

Agregado en: v18.8.0, v16.18.0

La representación en cadena de la familia IP local. 'IPv4' o 'IPv6'.

socket.pause()

Pausa la lectura de datos. Es decir, los eventos 'data' no se emitirán. Útil para reducir la velocidad de una carga.

socket.pending

Agregado en: v11.2.0, v10.16.0

Esto es true si el socket aún no está conectado, ya sea porque aún no se ha llamado a .connect() o porque todavía está en proceso de conexión (ver socket.connecting).

socket.ref()

Agregado en: v0.9.1

Opuesto a unref(), llamar a ref() en un socket previamente unref no permitirá que el programa se cierre si es el único socket restante (el comportamiento predeterminado). Si el socket está ref llamando a ref de nuevo no tendrá ningún efecto.

socket.remoteAddress

Agregado en: v0.5.10

La representación en cadena de la dirección IP remota. Por ejemplo, '74.125.127.100' o '2001:4860:a005::68'. El valor puede ser undefined si el socket se destruye (por ejemplo, si el cliente se desconecta).

socket.remoteFamily

Agregado en: v0.11.14

La representación en cadena de la familia IP remota. 'IPv4' o 'IPv6'. El valor puede ser undefined si el socket se destruye (por ejemplo, si el cliente se desconecta).

socket.remotePort

Agregado en: v0.5.10

La representación numérica del puerto remoto. Por ejemplo, 80 o 21. El valor puede ser undefined si el socket se destruye (por ejemplo, si el cliente se desconecta).

socket.resetAndDestroy()

Agregado en: v18.3.0, v16.17.0

Cierra la conexión TCP enviando un paquete RST y destruye el flujo. Si este socket TCP está en estado de conexión, enviará un paquete RST y destruirá este socket TCP una vez que esté conectado. De lo contrario, llamará a socket.destroy con un error ERR_SOCKET_CLOSED. Si este no es un socket TCP (por ejemplo, una tubería), llamar a este método lanzará inmediatamente un error ERR_INVALID_HANDLE_TYPE.

socket.resume()

Reanuda la lectura después de una llamada a socket.pause().

socket.setEncoding([encoding])

Agregado en: v0.1.90

Establece la codificación para el socket como un Flujo de lectura. Consulta readable.setEncoding() para obtener más información.

socket.setKeepAlive([enable][, initialDelay])

[Historial]

VersiónCambios
v13.12.0, v12.17.0Se agregaron nuevos valores predeterminados para las opciones de socket TCP_KEEPCNT y TCP_KEEPINTVL.
v0.1.92Agregado en: v0.1.92

Activa/desactiva la funcionalidad keep-alive y, opcionalmente, establece el retraso inicial antes de que se envíe la primera sonda keepalive en un socket inactivo.

Establece initialDelay (en milisegundos) para establecer el retraso entre el último paquete de datos recibido y la primera sonda keepalive. Si se establece 0 para initialDelay, el valor no cambiará con respecto al valor predeterminado (o configuración anterior).

Habilitar la funcionalidad keep-alive establecerá las siguientes opciones de socket:

  • SO_KEEPALIVE=1
  • TCP_KEEPIDLE=initialDelay
  • TCP_KEEPCNT=10
  • TCP_KEEPINTVL=1

socket.setNoDelay([noDelay])

Agregado en: v0.1.90

Habilita/deshabilita el uso del algoritmo de Nagle.

Cuando se crea una conexión TCP, tendrá habilitado el algoritmo de Nagle.

El algoritmo de Nagle retrasa los datos antes de enviarlos a través de la red. Intenta optimizar el rendimiento a expensas de la latencia.

Pasar true para noDelay o no pasar un argumento deshabilitará el algoritmo de Nagle para el socket. Pasar false para noDelay habilitará el algoritmo de Nagle.

socket.setTimeout(timeout[, callback])

[Historial]

VersiónCambios
v18.0.0Pasar una callback no válida al argumento callback ahora lanza ERR_INVALID_ARG_TYPE en lugar de ERR_INVALID_CALLBACK.
v0.1.90Agregado en: v0.1.90

Establece el socket para que se agote el tiempo de espera después de timeout milisegundos de inactividad en el socket. Por defecto, net.Socket no tiene un tiempo de espera.

Cuando se activa un tiempo de espera de inactividad, el socket recibirá un evento 'timeout', pero la conexión no se interrumpirá. El usuario debe llamar manualmente a socket.end() o socket.destroy() para finalizar la conexión.

js
socket.setTimeout(3000)
socket.on('timeout', () => {
  console.log('tiempo de espera del socket')
  socket.end()
})

Si timeout es 0, entonces se desactiva el tiempo de espera de inactividad existente.

El parámetro opcional callback se añadirá como un listener de una sola vez para el evento 'timeout'.

socket.timeout

Agregado en: v10.7.0

El tiempo de espera del socket en milisegundos establecido por socket.setTimeout(). Es undefined si no se ha establecido un tiempo de espera.

socket.unref()

Agregado en: v0.9.1

Llamar a unref() en un socket permitirá que el programa salga si este es el único socket activo en el sistema de eventos. Si el socket ya está unrefed, llamar a unref() de nuevo no tendrá ningún efecto.

socket.write(data[, encoding][, callback])

Agregado en: v0.1.90

Envía datos en el socket. El segundo parámetro especifica la codificación en el caso de una cadena. El valor predeterminado es la codificación UTF8.

Devuelve true si todos los datos se vaciaron correctamente en el búfer del kernel. Devuelve false si todos o parte de los datos se pusieron en cola en la memoria del usuario. Se emitirá 'drain' cuando el búfer vuelva a estar libre.

El parámetro callback opcional se ejecutará cuando los datos finalmente se escriban, lo que puede no ser de inmediato.

Consulte el método write() del flujo Writable para obtener más información.

socket.readyState

Agregado en: v0.5.0

Esta propiedad representa el estado de la conexión como una cadena.

  • Si el flujo se está conectando, socket.readyState es opening.
  • Si el flujo es legible y escribible, es open.
  • Si el flujo es legible y no escribible, es readOnly.
  • Si el flujo no es legible y es escribible, es writeOnly.

net.connect()

Alias de net.createConnection().

Posibles firmas:

net.connect(options[, connectListener])

Agregado en: v0.7.0

Alias de net.createConnection(options[, connectListener]).

net.connect(path[, connectListener])

Agregado en: v0.1.90

Alias de net.createConnection(path[, connectListener]).

net.connect(port[, host][, connectListener])

Agregado en: v0.1.90

Alias de net.createConnection(port[, host][, connectListener]).

net.createConnection()

Una función de fábrica, que crea un nuevo net.Socket, inicia inmediatamente la conexión con socket.connect(), y luego devuelve el net.Socket que inicia la conexión.

Cuando se establece la conexión, se emitirá un evento 'connect' en el socket devuelto. El último parámetro connectListener, si se proporciona, se agregará como un listener para el evento 'connect' una vez.

Posibles firmas:

La función net.connect() es un alias de esta función.

net.createConnection(options[, connectListener])

Agregado en: v0.1.90

Para las opciones disponibles, consulta new net.Socket([options]) y socket.connect(options[, connectListener]).

Opciones adicionales:

El siguiente es un ejemplo de un cliente del servidor de eco descrito en la sección net.createServer():

js
import net from 'node:net'
const client = net.createConnection({ port: 8124 }, () => {
  // listener 'connect'.
  console.log('¡conectado al servidor!')
  client.write('¡mundo!\r\n')
})
client.on('data', data => {
  console.log(data.toString())
  client.end()
})
client.on('end', () => {
  console.log('desconectado del servidor')
})
js
const net = require('node:net')
const client = net.createConnection({ port: 8124 }, () => {
  // listener 'connect'.
  console.log('¡conectado al servidor!')
  client.write('¡mundo!\r\n')
})
client.on('data', data => {
  console.log(data.toString())
  client.end()
})
client.on('end', () => {
  console.log('desconectado del servidor')
})

Para conectarse al socket /tmp/echo.sock:

js
const client = net.createConnection({ path: '/tmp/echo.sock' })

El siguiente es un ejemplo de un cliente que utiliza la opción port y onread. En este caso, la opción onread solo se utilizará para llamar a new net.Socket([options]) y la opción port se utilizará para llamar a socket.connect(options[, connectListener]).

js
import net from 'node:net'
import { Buffer } from 'node:buffer'
net.createConnection({
  port: 8124,
  onread: {
    // Reutiliza un búfer de 4KiB para cada lectura del socket.
    buffer: Buffer.alloc(4 * 1024),
    callback: function (nread, buf) {
      // Los datos recibidos están disponibles en `buf` desde 0 hasta `nread`.
      console.log(buf.toString('utf8', 0, nread))
    },
  },
})
js
const net = require('node:net')
net.createConnection({
  port: 8124,
  onread: {
    // Reutiliza un búfer de 4KiB para cada lectura del socket.
    buffer: Buffer.alloc(4 * 1024),
    callback: function (nread, buf) {
      // Los datos recibidos están disponibles en `buf` desde 0 hasta `nread`.
      console.log(buf.toString('utf8', 0, nread))
    },
  },
})

net.createConnection(path[, connectListener])

Añadido en: v0.1.90

Inicia una conexión IPC.

Esta función crea un nuevo net.Socket con todas las opciones establecidas por defecto, inicia inmediatamente la conexión con socket.connect(path[, connectListener]), luego devuelve el net.Socket que inicia la conexión.

net.createConnection(puerto[, host][, connectListener])

Agregado en: v0.1.90

Inicia una conexión TCP.

Esta función crea un nuevo net.Socket con todas las opciones establecidas por defecto, inicia inmediatamente la conexión con socket.connect(puerto[, host][, connectListener]), luego devuelve el net.Socket que inicia la conexión.

net.createServer([options][, connectionListener])

[Historial]

VersiónCambios
v20.1.0, v18.17.0Ahora se admite la opción highWaterMark.
v17.7.0, v16.15.0Ahora se admiten las opciones noDelay, keepAlive y keepAliveInitialDelay.
v0.5.0Añadido en: v0.5.0
  • options <Object>

    • allowHalfOpen <boolean> Si se establece en false, el socket finalizará automáticamente el lado de escritura cuando finalice el lado de lectura. Predeterminado: false.
    • highWaterMark <number> Opcionalmente, anula readableHighWaterMark y writableHighWaterMark de todos los net.Sockets. Predeterminado: Ver stream.getDefaultHighWaterMark().
    • keepAlive <boolean> Si se establece en true, habilita la funcionalidad keep-alive en el socket inmediatamente después de recibir una nueva conexión entrante, de manera similar a lo que se hace en socket.setKeepAlive(). Predeterminado: false.
    • keepAliveInitialDelay <number> Si se establece en un número positivo, establece el retardo inicial antes de que se envíe la primera sonda keepalive en un socket inactivo. Predeterminado: 0.
    • noDelay <boolean> Si se establece en true, deshabilita el uso del algoritmo de Nagle inmediatamente después de recibir una nueva conexión entrante. Predeterminado: false.
    • pauseOnConnect <boolean> Indica si el socket debe pausarse en las conexiones entrantes. Predeterminado: false.
    • blockList <net.BlockList> blockList se puede utilizar para deshabilitar el acceso entrante a direcciones IP específicas, rangos de IP o subredes IP. Esto no funciona si el servidor está detrás de un proxy inverso, NAT, etc., porque la dirección que se verifica con la lista de bloqueo es la dirección del proxy, o la especificada por el NAT.
  • connectionListener <Function> Se establece automáticamente como un detector para el evento 'connection'.

  • Devuelve: <net.Server>

Crea un nuevo servidor TCP o IPC.

Si allowHalfOpen se establece en true, cuando el otro extremo del socket señala el final de la transmisión, el servidor solo devolverá el final de la transmisión cuando se llame explícitamente a socket.end(). Por ejemplo, en el contexto de TCP, cuando se recibe un paquete FIN, un paquete FIN se envía de vuelta solo cuando se llama explícitamente a socket.end(). Hasta entonces, la conexión está medio cerrada (no es legible pero todavía se puede escribir). Consulte el evento 'end' y RFC 1122 (sección 4.2.2.13) para obtener más información.

Si pauseOnConnect se establece en true, el socket asociado a cada conexión entrante se pausará y no se leerán datos de su controlador. Esto permite que las conexiones se pasen entre procesos sin que el proceso original lea ningún dato. Para comenzar a leer datos de un socket pausado, llame a socket.resume().

El servidor puede ser un servidor TCP o un servidor IPC, dependiendo de a qué listen().

Aquí hay un ejemplo de un servidor de eco TCP que escucha las conexiones en el puerto 8124:

js
import net from 'node:net'
const server = net.createServer(c => {
  // listener 'connection'.
  console.log('cliente conectado')
  c.on('end', () => {
    console.log('cliente desconectado')
  })
  c.write('hola\r\n')
  c.pipe(c)
})
server.on('error', err => {
  throw err
})
server.listen(8124, () => {
  console.log('servidor vinculado')
})
js
const net = require('node:net')
const server = net.createServer(c => {
  // listener 'connection'.
  console.log('cliente conectado')
  c.on('end', () => {
    console.log('cliente desconectado')
  })
  c.write('hola\r\n')
  c.pipe(c)
})
server.on('error', err => {
  throw err
})
server.listen(8124, () => {
  console.log('servidor vinculado')
})

Pruebe esto usando telnet:

bash
telnet localhost 8124

Para escuchar en el socket /tmp/echo.sock:

js
server.listen('/tmp/echo.sock', () => {
  console.log('servidor vinculado')
})

Use nc para conectarse a un servidor de socket de dominio Unix:

bash
nc -U /tmp/echo.sock

net.getDefaultAutoSelectFamily()

Agregado en: v19.4.0

Obtiene el valor predeterminado actual de la opción autoSelectFamily de socket.connect(options). El valor predeterminado inicial es true, a menos que se proporcione la opción de línea de comandos --no-network-family-autoselection.

  • Devuelve: <boolean> El valor predeterminado actual de la opción autoSelectFamily.

net.setDefaultAutoSelectFamily(value)

Agregado en: v19.4.0

Establece el valor predeterminado de la opción autoSelectFamily de socket.connect(options).

  • value <boolean> El nuevo valor predeterminado. El valor predeterminado inicial es true, a menos que se proporcione la opción de línea de comandos --no-network-family-autoselection.

net.getDefaultAutoSelectFamilyAttemptTimeout()

Agregado en: v19.8.0, v18.18.0

Obtiene el valor predeterminado actual de la opción autoSelectFamilyAttemptTimeout de socket.connect(options). El valor predeterminado inicial es 250 o el valor especificado mediante la opción de línea de comandos --network-family-autoselection-attempt-timeout.

  • Devuelve: <number> El valor predeterminado actual de la opción autoSelectFamilyAttemptTimeout.

net.setDefaultAutoSelectFamilyAttemptTimeout(value)

Agregado en: v19.8.0, v18.18.0

Establece el valor predeterminado de la opción autoSelectFamilyAttemptTimeout de socket.connect(options).

  • value <number> El nuevo valor predeterminado, que debe ser un número positivo. Si el número es menor que 10, se usa el valor 10 en su lugar. El valor predeterminado inicial es 250 o el valor especificado a través de la opción de línea de comandos --network-family-autoselection-attempt-timeout.

net.isIP(input)

Agregado en: v0.3.0

Devuelve 6 si input es una dirección IPv6. Devuelve 4 si input es una dirección IPv4 en notación decimal punteada sin ceros iniciales. De lo contrario, devuelve 0.

js
net.isIP('::1') // devuelve 6
net.isIP('127.0.0.1') // devuelve 4
net.isIP('127.000.000.001') // devuelve 0
net.isIP('127.0.0.1/24') // devuelve 0
net.isIP('fhqwhgads') // devuelve 0

net.isIPv4(input)

Agregado en: v0.3.0

Devuelve true si input es una dirección IPv4 en notación decimal punteada sin ceros iniciales. De lo contrario, devuelve false.

js
net.isIPv4('127.0.0.1') // devuelve true
net.isIPv4('127.000.000.001') // devuelve false
net.isIPv4('127.0.0.1/24') // devuelve false
net.isIPv4('fhqwhgads') // devuelve false

net.isIPv6(input)

Agregado en: v0.3.0

Devuelve true si input es una dirección IPv6. De lo contrario, devuelve false.

js
net.isIPv6('::1') // devuelve true
net.isIPv6('fhqwhgads') // devuelve false