- Assertion testing
- Asynchronous context tracking
- Async hooks
- Buffer
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- Child processes
- Cluster
- Command-line options
- Console
- Corepack
- Crypto
- Debugger
- Deprecated APIs
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Globals
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization
- Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules:
node:module
API - Modules: Packages
- Net
- OS
- Path
- Performance hooks
- Permissions
- Process
- Punycode
- Query strings
- Readline
- REPL
- Report
- Single executable applications
- Stream
- String decoder
- Test runner
- Timers
- TLS/SSL
- Trace events
- TTY
- UDP/datagram
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- Worker threads
- Zlib
Node.js v19.9.0 documentation
- Node.js v19.9.0
-
►
Table of contents
- Net
- IPC support
- Class:
net.BlockList
- Class:
net.SocketAddress
- Class:
net.Server
- Class:
net.Socket
new net.Socket([options])
- Event:
'close'
- Event:
'connect'
- Event:
'data'
- Event:
'drain'
- Event:
'end'
- Event:
'error'
- Event:
'lookup'
- Event:
'ready'
- Event:
'timeout'
socket.address()
socket.autoSelectFamilyAttemptedAddresses
socket.bufferSize
socket.bytesRead
socket.bytesWritten
socket.connect()
socket.connecting
socket.destroy([error])
socket.destroyed
socket.destroySoon()
socket.end([data[, encoding]][, callback])
socket.localAddress
socket.localPort
socket.localFamily
socket.pause()
socket.pending
socket.ref()
socket.remoteAddress
socket.remoteFamily
socket.remotePort
socket.resetAndDestroy()
socket.resume()
socket.setEncoding([encoding])
socket.setKeepAlive([enable][, initialDelay])
socket.setNoDelay([noDelay])
socket.setTimeout(timeout[, callback])
socket.timeout
socket.unref()
socket.write(data[, encoding][, callback])
socket.readyState
net.connect()
net.createConnection()
net.createServer([options][, connectionListener])
net.getDefaultAutoSelectFamily()
net.setDefaultAutoSelectFamily(value)
net.getDefaultAutoSelectFamilyAttemptTimeout()
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
net.isIP(input)
net.isIPv4(input)
net.isIPv6(input)
- Net
-
►
Index
- Assertion testing
- Asynchronous context tracking
- Async hooks
- Buffer
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- Child processes
- Cluster
- Command-line options
- Console
- Corepack
- Crypto
- Debugger
- Deprecated APIs
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Globals
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization
- Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules:
node:module
API - Modules: Packages
- Net
- OS
- Path
- Performance hooks
- Permissions
- Process
- Punycode
- Query strings
- Readline
- REPL
- Report
- Single executable applications
- Stream
- String decoder
- Test runner
- Timers
- TLS/SSL
- Trace events
- TTY
- UDP/datagram
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Web Streams API
- Worker threads
- Zlib
- ► Other versions
- ► Options
Table of contents
- Net
- IPC support
- Class:
net.BlockList
- Class:
net.SocketAddress
- Class:
net.Server
- Class:
net.Socket
new net.Socket([options])
- Event:
'close'
- Event:
'connect'
- Event:
'data'
- Event:
'drain'
- Event:
'end'
- Event:
'error'
- Event:
'lookup'
- Event:
'ready'
- Event:
'timeout'
socket.address()
socket.autoSelectFamilyAttemptedAddresses
socket.bufferSize
socket.bytesRead
socket.bytesWritten
socket.connect()
socket.connecting
socket.destroy([error])
socket.destroyed
socket.destroySoon()
socket.end([data[, encoding]][, callback])
socket.localAddress
socket.localPort
socket.localFamily
socket.pause()
socket.pending
socket.ref()
socket.remoteAddress
socket.remoteFamily
socket.remotePort
socket.resetAndDestroy()
socket.resume()
socket.setEncoding([encoding])
socket.setKeepAlive([enable][, initialDelay])
socket.setNoDelay([noDelay])
socket.setTimeout(timeout[, callback])
socket.timeout
socket.unref()
socket.write(data[, encoding][, callback])
socket.readyState
net.connect()
net.createConnection()
net.createServer([options][, connectionListener])
net.getDefaultAutoSelectFamily()
net.setDefaultAutoSelectFamily(value)
net.getDefaultAutoSelectFamilyAttemptTimeout()
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
net.isIP(input)
net.isIPv4(input)
net.isIPv6(input)
Net#
Source Code: lib/net.js
The node:net
module provides an asynchronous network API for creating stream-based
TCP or IPC servers (net.createServer()
) and clients
(net.createConnection()
).
It can be accessed using:
const net = require('node:net');
IPC support#
The node:net
module supports IPC with named pipes on Windows, and Unix domain
sockets on other operating systems.
Identifying paths for IPC connections#
net.connect()
, net.createConnection()
, server.listen()
, and
socket.connect()
take a path
parameter to identify IPC endpoints.
On Unix, the local domain is also known as the Unix domain. The path is a
file system pathname. It gets truncated to an OS-dependent length of
sizeof(sockaddr_un.sun_path) - 1
. Typical values are 107 bytes on Linux and
103 bytes on macOS. If a Node.js API abstraction creates the Unix domain socket,
it will unlink the Unix domain socket as well. For example,
net.createServer()
may create a Unix domain socket and
server.close()
will unlink it. But if a user creates the Unix domain
socket outside of these abstractions, the user will need to remove it. The same
applies when a Node.js API creates a Unix domain socket but the program then
crashes. In short, a Unix domain socket will be visible in the file system and
will persist until unlinked.
On Windows, the local domain is implemented using a named pipe. The path must
refer to an entry in \\?\pipe\
or \\.\pipe\
. Any characters are permitted,
but the latter may do some processing of pipe names, such as resolving ..
sequences. Despite how it might look, the pipe namespace is flat. Pipes will
not persist. They are removed when the last reference to them is closed.
Unlike Unix domain sockets, Windows will close and remove the pipe when the
owning process exits.
JavaScript string escaping requires paths to be specified with extra backslash escaping such as:
net.createServer().listen(
path.join('\\\\?\\pipe', process.cwd(), 'myctl'));
Class: net.BlockList
#
The BlockList
object can be used with some network APIs to specify rules for
disabling inbound or outbound access to specific IP addresses, IP ranges, or
IP subnets.
blockList.addAddress(address[, type])
#
address
<string> | <net.SocketAddress> An IPv4 or IPv6 address.type
<string> Either'ipv4'
or'ipv6'
. Default:'ipv4'
.
Adds a rule to block the given IP address.
blockList.addRange(start, end[, type])
#
start
<string> | <net.SocketAddress> The starting IPv4 or IPv6 address in the range.end
<string> | <net.SocketAddress> The ending IPv4 or IPv6 address in the range.type
<string> Either'ipv4'
or'ipv6'
. Default:'ipv4'
.
Adds a rule to block a range of IP addresses from start
(inclusive) to
end
(inclusive).
blockList.addSubnet(net, prefix[, type])
#
net
<string> | <net.SocketAddress> The network IPv4 or IPv6 address.prefix
<number> The number of CIDR prefix bits. For IPv4, this must be a value between0
and32
. For IPv6, this must be between0
and128
.type
<string> Either'ipv4'
or'ipv6'
. Default:'ipv4'
.
Adds a rule to block a range of IP addresses specified as a subnet mask.
blockList.check(address[, type])
#
address
<string> | <net.SocketAddress> The IP address to checktype
<string> Either'ipv4'
or'ipv6'
. Default:'ipv4'
.- Returns: <boolean>
Returns true
if the given IP address matches any of the rules added to the
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')); // Prints: true
console.log(blockList.check('10.0.0.3')); // Prints: true
console.log(blockList.check('222.111.111.222')); // Prints: false
// IPv6 notation for IPv4 addresses works:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')); // Prints: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')); // Prints: true
blockList.rules
#
- Type: <string[]>
The list of rules added to the blocklist.
Class: net.SocketAddress
#
new net.SocketAddress([options])
#
options
<Object>
socketaddress.address
#
- Type <string>
socketaddress.family
#
- Type <string> Either
'ipv4'
or'ipv6'
.
socketaddress.flowlabel
#
- Type <number>
socketaddress.port
#
- Type <number>
Class: net.Server
#
- Extends: <EventEmitter>
This class is used to create a TCP or IPC server.
new net.Server([options][, connectionListener])
#
options
<Object> Seenet.createServer([options][, connectionListener])
.connectionListener
<Function> Automatically set as a listener for the'connection'
event.- Returns: <net.Server>
net.Server
is an EventEmitter
with the following events:
Event: 'close'
#
Emitted when the server closes. If connections exist, this event is not emitted until all connections are ended.
Event: 'connection'
#
- <net.Socket> The connection object
Emitted when a new connection is made. socket
is an instance of
net.Socket
.
Event: 'error'
#
Emitted when an error occurs. Unlike net.Socket
, the 'close'
event will not be emitted directly following this event unless
server.close()
is manually called. See the example in discussion of
server.listen()
.
Event: 'listening'
#
Emitted when the server has been bound after calling server.listen()
.
Event: 'drop'
#
When the number of connections reaches the threshold of server.maxConnections
,
the server will drop new connections and emit 'drop'
event instead. If it is a
TCP server, the argument is as follows, otherwise the argument is undefined
.
data
<Object> The argument passed to event listener.
server.address()
#
Returns the bound address
, the address family
name, and port
of the server
as reported by the operating system if listening on an IP socket
(useful to find which port was assigned when getting an OS-assigned address):
{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
.
For a server listening on a pipe or Unix domain socket, the name is returned as a string.
const server = net.createServer((socket) => {
socket.end('goodbye\n');
}).on('error', (err) => {
// Handle errors here.
throw err;
});
// Grab an arbitrary unused port.
server.listen(() => {
console.log('opened server on', server.address());
});
server.address()
returns null
before the 'listening'
event has been
emitted or after calling server.close()
.
server.close([callback])
#
callback
<Function> Called when the server is closed.- Returns: <net.Server>
Stops the server from accepting new connections and keeps existing
connections. This function is asynchronous, the server is finally closed
when all connections are ended and the server emits a 'close'
event.
The optional callback
will be called once the 'close'
event occurs. Unlike
that event, it will be called with an Error
as its only argument if the server
was not open when it was closed.
server.getConnections(callback)
#
callback
<Function>- Returns: <net.Server>
Asynchronously get the number of concurrent connections on the server. Works when sockets were sent to forks.
Callback should take two arguments err
and count
.
server.listen()
#
Start a server listening for connections. A net.Server
can be a TCP or
an IPC server depending on what it listens to.
Possible signatures:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
server.listen(path[, backlog][, callback])
for IPC serversserver.listen([port[, host[, backlog]]][, callback])
for TCP servers
This function is asynchronous. When the server starts listening, the
'listening'
event will be emitted. The last parameter callback
will be added as a listener for the 'listening'
event.
All listen()
methods can take a backlog
parameter to specify the maximum
length of the queue of pending connections. The actual length will be determined
by the OS through sysctl settings such as tcp_max_syn_backlog
and somaxconn
on Linux. The default value of this parameter is 511 (not 512).
All net.Socket
are set to SO_REUSEADDR
(see socket(7)
for
details).
The server.listen()
method can be called again if and only if there was an
error during the first server.listen()
call or server.close()
has been
called. Otherwise, an ERR_SERVER_ALREADY_LISTEN
error will be thrown.
One of the most common errors raised when listening is EADDRINUSE
.
This happens when another server is already listening on the requested
port
/path
/handle
. One way to handle this would be to retry
after a certain amount of time:
server.on('error', (e) => {
if (e.code === 'EADDRINUSE') {
console.error('Address in use, retrying...');
setTimeout(() => {
server.close();
server.listen(PORT, HOST);
}, 1000);
}
});
server.listen(handle[, backlog][, callback])
#
handle
<Object>backlog
<number> Common parameter ofserver.listen()
functionscallback
<Function>- Returns: <net.Server>
Start a server listening for connections on a given handle
that has
already been bound to a port, a Unix domain socket, or a Windows named pipe.
The handle
object can be either a server, a socket (anything with an
underlying _handle
member), or an object with an fd
member that is a
valid file descriptor.
Listening on a file descriptor is not supported on Windows.
server.listen(options[, callback])
#
options
<Object> Required. Supports the following properties:port
<number>host
<string>path
<string> Will be ignored ifport
is specified. See Identifying paths for IPC connections.backlog
<number> Common parameter ofserver.listen()
functions.exclusive
<boolean> Default:false
readableAll
<boolean> For IPC servers makes the pipe readable for all users. Default:false
.writableAll
<boolean> For IPC servers makes the pipe writable for all users. Default:false
.ipv6Only
<boolean> For TCP servers, settingipv6Only
totrue
will disable dual-stack support, i.e., binding to host::
won't make0.0.0.0
be bound. Default:false
.signal
<AbortSignal> An AbortSignal that may be used to close a listening server.
callback
<Function> functions.- Returns: <net.Server>
If port
is specified, it behaves the same as
server.listen([port[, host[, backlog]]][, callback])
.
Otherwise, if path
is specified, it behaves the same as
server.listen(path[, backlog][, callback])
.
If none of them is specified, an error will be thrown.
If exclusive
is false
(default), then cluster workers will use the same
underlying handle, allowing connection handling duties to be shared. When
exclusive
is true
, the handle is not shared, and attempted port sharing
results in an error. An example which listens on an exclusive port is
shown below.
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
});
When exclusive
is true
and the underlying handle is shared, it is
possible that several workers query a handle with different backlogs.
In this case, the first backlog
passed to the master process will be used.
Starting an IPC server as root may cause the server path to be inaccessible for
unprivileged users. Using readableAll
and writableAll
will make the server
accessible for all users.
If the signal
option is enabled, calling .abort()
on the corresponding
AbortController
is similar to calling .close()
on the server:
const controller = new AbortController();
server.listen({
host: 'localhost',
port: 80,
signal: controller.signal,
});
// Later, when you want to close the server.
controller.abort();
server.listen(path[, backlog][, callback])
#
path
<string> Path the server should listen to. See Identifying paths for IPC connections.backlog
<number> Common parameter ofserver.listen()
functions.callback
<Function>.- Returns: <net.Server>
Start an IPC server listening for connections on the given path
.
server.listen([port[, host[, backlog]]][, callback])
#
port
<number>host
<string>backlog
<number> Common parameter ofserver.listen()
functions.callback
<Function>.- Returns: <net.Server>
Start a TCP server listening for connections on the given port
and host
.
If port
is omitted or is 0, the operating system will assign an arbitrary
unused port, which can be retrieved by using server.address().port
after the 'listening'
event has been emitted.
If host
is omitted, the server will accept connections on the
unspecified IPv6 address (::
) when IPv6 is available, or the
unspecified IPv4 address (0.0.0.0
) otherwise.
In most operating systems, listening to the unspecified IPv6 address (::
)
may cause the net.Server
to also listen on the unspecified IPv4 address
(0.0.0.0
).
server.listening
#
- <boolean> Indicates whether or not the server is listening for connections.
server.maxConnections
#
Set this property to reject connections when the server's connection count gets high.
It is not recommended to use this option once a socket has been sent to a child
with child_process.fork()
.
server.ref()
#
- Returns: <net.Server>
Opposite of unref()
, calling ref()
on a previously unref
ed server will
not let the program exit if it's the only server left (the default behavior).
If the server is ref
ed calling ref()
again will have no effect.
server.unref()
#
- Returns: <net.Server>
Calling unref()
on a server will allow the program to exit if this is the only
active server in the event system. If the server is already unref
ed calling
unref()
again will have no effect.
Class: net.Socket
#
- Extends: <stream.Duplex>
This class is an abstraction of a TCP socket or a streaming IPC endpoint
(uses named pipes on Windows, and Unix domain sockets otherwise). It is also
an EventEmitter
.
A net.Socket
can be created by the user and used directly to interact with
a server. For example, it is returned by net.createConnection()
,
so the user can use it to talk to the server.
It can also be created by Node.js and passed to the user when a connection
is received. For example, it is passed to the listeners of a
'connection'
event emitted on a net.Server
, so the user can use
it to interact with the client.
new net.Socket([options])
#
options
<Object> Available options are:fd
<number> If specified, wrap around an existing socket with the given file descriptor, otherwise a new socket will be created.allowHalfOpen
<boolean> If set tofalse
, then the socket will automatically end the writable side when the readable side ends. Seenet.createServer()
and the'end'
event for details. Default:false
.readable
<boolean> Allow reads on the socket when anfd
is passed, otherwise ignored. Default:false
.writable
<boolean> Allow writes on the socket when anfd
is passed, otherwise ignored. Default:false
.signal
<AbortSignal> An Abort signal that may be used to destroy the socket.
- Returns: <net.Socket>
Creates a new socket object.
The newly created socket can be either a TCP socket or a streaming IPC
endpoint, depending on what it connect()
to.
Event: 'close'
#
hadError
<boolean>true
if the socket had a transmission error.
Emitted once the socket is fully closed. The argument hadError
is a boolean
which says if the socket was closed due to a transmission error.
Event: 'connect'
#
Emitted when a socket connection is successfully established.
See net.createConnection()
.
Event: 'data'
#
Emitted when data is received. The argument data
will be a Buffer
or
String
. Encoding of data is set by socket.setEncoding()
.
The data will be lost if there is no listener when a Socket
emits a 'data'
event.
Event: 'drain'
#
Emitted when the write buffer becomes empty. Can be used to throttle uploads.
See also: the return values of socket.write()
.
Event: 'end'
#
Emitted when the other end of the socket signals the end of transmission, thus ending the readable side of the socket.
By default (allowHalfOpen
is false
) the socket will send an end of
transmission packet back and destroy its file descriptor once it has written out
its pending write queue. However, if allowHalfOpen
is set to true
, the
socket will not automatically end()
its writable side,
allowing the user to write arbitrary amounts of data. The user must call
end()
explicitly to close the connection (i.e. sending a
FIN packet back).
Event: 'error'
#
Emitted when an error occurs. The 'close'
event will be called directly
following this event.
Event: 'lookup'
#
Emitted after resolving the host name but before connecting. Not applicable to Unix sockets.
err
<Error> | <null> The error object. Seedns.lookup()
.address
<string> The IP address.family
<number> | <null> The address type. Seedns.lookup()
.host
<string> The host name.
Event: 'ready'
#
Emitted when a socket is ready to be used.
Triggered immediately after 'connect'
.
Event: 'timeout'
#
Emitted if the socket times out from inactivity. This is only to notify that the socket has been idle. The user must manually close the connection.
See also: socket.setTimeout()
.
socket.address()
#
- Returns: <Object>
Returns the bound address
, the address family
name and port
of the
socket as reported by the operating system:
{ port: 12346, family: 'IPv4', address: '127.0.0.1' }
socket.autoSelectFamilyAttemptedAddresses
#
This property is only present if the family autoselection algorithm is enabled in
socket.connect(options)
and it is an array of the addresses that have been attempted.
Each address is a string in the form of $IP:$PORT
. If the connection was successful,
then the last address is the one that the socket is currently connected to.
socket.bufferSize
#
writable.writableLength
instead.This property shows the number of characters buffered for writing. The buffer may contain strings whose length after encoding is not yet known. So this number is only an approximation of the number of bytes in the buffer.
net.Socket
has the property that socket.write()
always works. This is to
help users get up and running quickly. The computer cannot always keep up
with the amount of data that is written to a socket. The network connection
simply might be too slow. Node.js will internally queue up the data written to a
socket and send it out over the wire when it is possible.
The consequence of this internal buffering is that memory may grow.
Users who experience large or growing bufferSize
should attempt to
"throttle" the data flows in their program with
socket.pause()
and