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:
import net from 'node:net'
const net = require('node:net')
Soporte IPC
[Historial]
Versión | Cambios |
---|---|
v20.8.0 | Soporte 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:
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
address
<string> | <net.SocketAddress> Una dirección IPv4 o IPv6.type
<string> Ya sea'ipv4'
o'ipv6'
. Predeterminado:'ipv4'
.
Agrega una regla para bloquear la dirección IP dada.
blockList.addRange(start, end[, type])
Agregado en: v15.0.0, v14.18.0
start
<string> | <net.SocketAddress> La dirección IPv4 o IPv6 inicial en el rango.end
<string> | <net.SocketAddress> La dirección IPv4 o IPv6 final en el rango.type
<string> Ya sea'ipv4'
o'ipv6'
. Predeterminado:'ipv4'
.
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 entre0
y32
. Para IPv6, debe estar entre0
y128
.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
address
<string> | <net.SocketAddress> La dirección IP a verificar.type
<string> Ya sea'ipv4'
o'ipv6'
. Predeterminado:'ipv4'
.- Devuelve: <boolean>
Devuelve true
si la dirección IP dada coincide con alguna de las reglas agregadas a la BlockList
.
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
- Tipo: <string[]>
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
sivalue
es unanet.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'
sifamily
es'ipv4'
;'::'
sifamily
es'ipv6'
.family
<string> Uno de'ipv4'
o'ipv6'
. Predeterminado:'ipv4'
.flowlabel
<número> Una etiqueta de flujo IPv6 utilizada solo sifamily
es'ipv6'
.port
<número> Un puerto IP.
socketaddress.address
Agregado en: v15.14.0, v14.18.0
- Tipo <string>
socketaddress.family
Agregado en: v15.14.0, v14.18.0
- Tipo <string> Ya sea
'ipv4'
o'ipv6'
.
socketaddress.flowlabel
Agregado en: v15.14.0, v14.18.0
- Tipo <number>
socketaddress.port
Agregado en: v15.14.0, v14.18.0
- Tipo <number>
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, devuelveundefined
.
Clase: net.Server
Añadido en: v0.1.90
- Extiende: <EventEmitter>
Esta clase se utiliza para crear un servidor TCP o IPC.
new net.Server([opciones][, connectionListener])
opciones
<Object> Vernet.createServer([opciones][, connectionListener])
.connectionListener
<Function> Se establece automáticamente como un listener para el evento'connection'
.- Devuelve: <net.Server>
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
- <net.Socket> El objeto de conexión
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ón | Cambios |
---|---|
v18.4.0 | La propiedad family ahora devuelve una cadena en lugar de un número. |
v18.0.0 | La propiedad family ahora devuelve un número en lugar de una cadena. |
v0.1.90 | Añ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.
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
callback
<Function> Se llama cuando el servidor está cerrado.- Devuelve: <net.Server>
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
callback
<Function>- Devuelve: <net.Server>
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:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
server.listen(path[, backlog][, callback])
para servidores IPCserver.listen([port[, host[, backlog]]][, callback])
para servidores TCP
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:
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
handle
<Objeto>backlog
<número> Parámetro común de las funcionesserver.listen()
callback
<Función>- Devuelve: <net.Server>
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ón | Cambios |
---|---|
v23.1.0 | Se admite la opción reusePort . |
v15.6.0 | Se agregó la compatibilidad con AbortSignal. |
v11.4.0 | Se admite la opción ipv6Only . |
v0.11.14 | Agregado en: v0.11.14 |
options
<Objeto> Obligatorio. Admite las siguientes propiedades:backlog
<número> Parámetro común de las funcionesserver.listen()
.exclusive
<booleano> Predeterminado:false
host
<cadena>ipv6Only
<booleano> Para servidores TCP, estableceripv6Only
entrue
deshabilitará la compatibilidad con pila doble, es decir, la vinculación al host::
no hará que0.0.0.0
se vincule. Predeterminado:false
.reusePort
<booleano> Para servidores TCP, establecerreusePort
entrue
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 especificaport
. 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.
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:
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
path
<string> Ruta en la que el servidor debe escuchar. Consulte Identificación de rutas para conexiones IPC.backlog
<number> Parámetro común de las funcionesserver.listen()
.callback
<Function>.- Devuelve: <net.Server>
Inicia un servidor IPC que escucha conexiones en la ruta
dada.
server.listen([port[, host[, backlog]]][, callback])
Agregado en: v0.1.90
port
<number>host
<string>backlog
<number> Parámetro común de las funcionesserver.listen()
.callback
<Function>.- Devuelve: <net.Server>
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ón | Cambios |
---|---|
v21.0.0 | Establecer maxConnections a 0 descarta todas las conexiones entrantes. Anteriormente, se interpretaba como Infinity . |
v0.2.0 | Agregado 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
- Devuelve: <net.Server>
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
- Devuelve: <net.Server>
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
- Extiende: <stream.Duplex>
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ón | Cambios |
---|---|
v15.14.0 | Se añadió soporte para AbortSignal. |
v12.10.0 | Se añadió la opción onread . |
v0.3.4 | Añadido en: v0.3.4 |
options
<Objeto> Las opciones disponibles son:allowHalfOpen
<booleano> Si se establece enfalse
, el socket finalizará automáticamente el lado de escritura cuando finalice el lado de lectura. Consultanet.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 únicobuffer
y se pasan alcallback
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 comopause()
yresume()
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 enbuffer
y una referencia abuffer
. Devuelvefalse
desde esta función parapause()
el socket implícitamente. Esta función se ejecutará en el contexto global.readable
<booleano> Permite lecturas en el socket cuando se pasa unfd
; 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 unfd
; 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 ser6
para IPv6 o4
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 ser6
para IPv6 o4
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 ser6
para IPv6 o4
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ón | Cambios |
---|---|
v5.10.0 | El parámetro host ahora es compatible. |
v0.11.3 | Añadido en: v0.11.3 |
Emitido después de resolver el nombre de host pero antes de conectar. No aplicable a sockets Unix.
err
<Error> | <null> El objeto de error. Verdns.lookup()
.address
<string> La dirección IP.family
<number> | <null> El tipo de dirección. Verdns.lookup()
.host
<string> El nombre de host.
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ón | Cambios |
---|---|
v18.4.0 | La propiedad family ahora devuelve una cadena en lugar de un número. |
v18.0.0 | La propiedad family ahora devuelve un número en lugar de una cadena. |
v0.1.90 | Agregado en: v0.1.90 |
- Devuelve: <Objeto>
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:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
para conexiones IPC.socket.connect(port[, host][, connectListener])
para conexiones TCP.- Devuelve: <net.Socket> El propio socket.
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ón | Cambios |
---|---|
v19.4.0 | El 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.0 | El 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.0 | Se agregó la opción autoSelectFamily . |
v17.7.0, v16.15.0 | Ahora se admiten las opciones noDelay , keepAlive y keepAliveInitialDelay . |
v6.0.0 | La 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.0 | Ahora se admite la opción hints . |
v0.1.90 | Agregado en: v0.1.90 |
options
<Object>connectListener
<Function> Parámetro común de los métodossocket.connect()
. Se agregará como un escuchador para el evento'connect'
una vez.- Devuelve: <net.Socket> El propio socket.
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 entrue
, habilita un algoritmo de autodetección de familia que implementa libremente la sección 5 de RFC 8305. La opciónall
pasada a la búsqueda se establece entrue
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ónautoSelectFamilyAttemptTimeout
antes de que se agote el tiempo y se intente la siguiente dirección. Se ignora si la opciónfamily
no es0
o si se establecelocalAddress
. 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 únicoAggregateError
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ónautoSelectFamily
. Si se establece en un entero positivo menor que10
, entonces se usará el valor10
en su lugar. Predeterminado:net.getDefaultAutoSelectFamilyAttemptTimeout()
.family
<number>: Versión de la pila IP. Debe ser4
,6
o0
. El valor0
indica que se permiten tanto las direcciones IPv4 como IPv6. Predeterminado:0
.hints
<number> Opcionaldns.lookup()
sugerencias.host
<string> Host al que debe conectarse el socket. Predeterminado:'localhost'
.keepAlive
<boolean> Si se establece entrue
, 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 ensocket.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 entrue
, 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:
path
<string> Requerido. Ruta a la que debe conectarse el cliente. Consulte Identificación de rutas para conexiones IPC. Si se proporciona, se ignoran las opciones específicas de TCP anteriores.
socket.connect(path[, connectListener])
path
<string> Ruta a la que el cliente debe conectarse. Consulte Identificación de rutas para conexiones IPC.connectListener
<Function> Parámetro común de los métodossocket.connect()
. Se agregará como un listener para el evento'connect'
una vez.- Devuelve: <net.Socket> El propio socket.
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
port
<number> Puerto al que el cliente debe conectarse.host
<string> Host al que el cliente debe conectarse.connectListener
<Function> Parámetro común de los métodossocket.connect()
. Se agregará como un listener para el evento'connect'
una vez.- Devuelve: <net.Socket> El propio socket.
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
error
<Object>- Devuelve: <net.Socket>
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
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Solo se usa cuando data esstring
. Por defecto:'utf8'
.callback
<Function> Callback opcional para cuando el socket ha terminado.- Devuelve: <net.Socket> El propio socket.
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()
- Devuelve: <net.Socket> El propio socket.
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
- Devuelve: <net.Socket> El propio socket.
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
- Devuelve: <net.Socket>
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()
- Devuelve: <net.Socket> El propio socket.
Reanuda la lectura después de una llamada a socket.pause()
.
socket.setEncoding([encoding])
Agregado en: v0.1.90
encoding
<string>- Devuelve: <net.Socket> El propio socket.
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ón | Cambios |
---|---|
v13.12.0, v12.17.0 | Se agregaron nuevos valores predeterminados para las opciones de socket TCP_KEEPCNT y TCP_KEEPINTVL . |
v0.1.92 | Agregado en: v0.1.92 |
enable
<boolean> Predeterminado:false
initialDelay
<number> Predeterminado:0
- Devuelve: <net.Socket> El propio socket.
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
noDelay
<boolean> Predeterminado:true
- Devuelve: <net.Socket> El propio socket.
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ón | Cambios |
---|---|
v18.0.0 | Pasar una callback no válida al argumento callback ahora lanza ERR_INVALID_ARG_TYPE en lugar de ERR_INVALID_CALLBACK . |
v0.1.90 | Agregado en: v0.1.90 |
timeout
<number>callback
<Function>- Devuelve: <net.Socket> El propio socket.
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.
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
- Devuelve: <net.Socket> El propio socket.
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á unref
ed, llamar a unref()
de nuevo no tendrá ningún efecto.
socket.write(data[, encoding][, callback])
Agregado en: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> Solo se usa cuando los datos sonstring
. Predeterminado:utf8
.callback
<Function>- Devuelve: <boolean>
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
esopening
. - 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])
net.connect(path[, connectListener])
para conexiones IPC.net.connect(port[, host][, connectListener])
para conexiones TCP.
net.connect(options[, connectListener])
Agregado en: v0.7.0
options
<Objeto>connectListener
<Función>- Devuelve: <net.Socket>
Alias de net.createConnection(options[, connectListener])
.
net.connect(path[, connectListener])
Agregado en: v0.1.90
path
<string>connectListener
<Function>- Devuelve: <net.Socket>
Alias de net.createConnection(path[, connectListener])
.
net.connect(port[, host][, connectListener])
Agregado en: v0.1.90
port
<number>host
<string>connectListener
<Function>- Devuelve: <net.Socket>
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:
net.createConnection(options[, connectListener])
net.createConnection(path[, connectListener])
para conexiones IPC.net.createConnection(port[, host][, connectListener])
para conexiones TCP.
La función net.connect()
es un alias de esta función.
net.createConnection(options[, connectListener])
Agregado en: v0.1.90
options
<Object> Obligatorio. Se pasará tanto a la llamadanew net.Socket([options])
como al métodosocket.connect(options[, connectListener])
.connectListener
<Function> Parámetro común de las funcionesnet.createConnection()
. Si se proporciona, se añadirá como un listener para el evento'connect'
en el socket devuelto una vez.- Devuelve: <net.Socket> El socket recién creado que se utiliza para iniciar la conexión.
Para las opciones disponibles, consulta new net.Socket([options])
y socket.connect(options[, connectListener])
.
Opciones adicionales:
timeout
<number> Si se establece, se utilizará para llamar asocket.setTimeout(timeout)
después de que se cree el socket, pero antes de que comience la conexión.
El siguiente es un ejemplo de un cliente del servidor de eco descrito en la sección net.createServer()
:
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')
})
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
:
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])
.
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))
},
},
})
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
path
<string> Ruta a la que el socket debe conectarse. Se pasará asocket.connect(path[, connectListener])
. Ver Identificación de rutas para conexiones IPC.connectListener
<Function> Parámetro común de las funcionesnet.createConnection()
, un listener "once" para el evento'connect'
en el socket iniciador. Se pasará asocket.connect(path[, connectListener])
.- Devuelve: <net.Socket> El socket recién creado usado para iniciar la conexión.
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
puerto
<número> Puerto al que el socket debe conectarse. Se pasará asocket.connect(puerto[, host][, connectListener])
.host
<string> Host al que el socket debe conectarse. Se pasará asocket.connect(puerto[, host][, connectListener])
. Predeterminado:'localhost'
.connectListener
<Función> Parámetro común de las funcionesnet.createConnection()
, un listener "once" para el evento'connect'
en el socket iniciador. Se pasará asocket.connect(puerto[, host][, connectListener])
.- Devuelve: <net.Socket> El socket recién creado que se utiliza para iniciar la conexión.
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ón | Cambios |
---|---|
v20.1.0, v18.17.0 | Ahora se admite la opción highWaterMark . |
v17.7.0, v16.15.0 | Ahora se admiten las opciones noDelay , keepAlive y keepAliveInitialDelay . |
v0.5.0 | Añadido en: v0.5.0 |
options
<Object>allowHalfOpen
<boolean> Si se establece enfalse
, el socket finalizará automáticamente el lado de escritura cuando finalice el lado de lectura. Predeterminado:false
.highWaterMark
<number> Opcionalmente, anulareadableHighWaterMark
ywritableHighWaterMark
de todos losnet.Socket
s. Predeterminado: Verstream.getDefaultHighWaterMark()
.keepAlive
<boolean> Si se establece entrue
, 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 ensocket.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 entrue
, 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:
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')
})
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
:
telnet localhost 8124
Para escuchar en el socket /tmp/echo.sock
:
server.listen('/tmp/echo.sock', () => {
console.log('servidor vinculado')
})
Use nc
para conectarse a un servidor de socket de dominio Unix:
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 estrue
, 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 que10
, se usa el valor10
en su lugar. El valor predeterminado inicial es250
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
.
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
.
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
.
net.isIPv6('::1') // devuelve true
net.isIPv6('fhqwhgads') // devuelve false