Net
소스 코드: lib/net.js
node:net
모듈은 스트림 기반 TCP 또는 IPC 서버(net.createServer()
) 및 클라이언트(net.createConnection()
)를 생성하기 위한 비동기 네트워크 API를 제공합니다.
다음과 같이 접근할 수 있습니다.
import net from 'node:net'
const net = require('node:net')
IPC 지원
[기록]
버전 | 변경 사항 |
---|---|
v20.8.0 | \0abstract 와 같은 추상 Unix 도메인 소켓 경로에 대한 바인딩 지원. Node.js \< v20.4.0 에서는 '\0'을 바인딩할 수 있습니다. |
node:net
모듈은 Windows에서 명명된 파이프와 다른 운영 체제에서 Unix 도메인 소켓을 사용하여 IPC를 지원합니다.
IPC 연결 경로 식별
net.connect()
, net.createConnection()
, server.listen()
및 socket.connect()
는 IPC 엔드포인트를 식별하기 위해 path
매개변수를 사용합니다.
Unix에서 로컬 도메인은 Unix 도메인이라고도 합니다. 경로는 파일 시스템 경로명입니다. 경로명의 길이가 sizeof(sockaddr_un.sun_path)
의 길이보다 크면 오류가 발생합니다. 일반적인 값은 Linux에서 107바이트이고 macOS에서 103바이트입니다. Node.js API 추상화가 Unix 도메인 소켓을 생성하면 Unix 도메인 소켓도 연결 해제합니다. 예를 들어, net.createServer()
는 Unix 도메인 소켓을 생성할 수 있으며 server.close()
는 이를 연결 해제합니다. 그러나 사용자가 이러한 추상화 외부에서 Unix 도메인 소켓을 생성하면 사용자가 제거해야 합니다. Node.js API가 Unix 도메인 소켓을 생성했지만 프로그램이 충돌하는 경우에도 동일하게 적용됩니다. 즉, Unix 도메인 소켓은 파일 시스템에서 볼 수 있으며 연결 해제될 때까지 지속됩니다. Linux에서는 경로 시작 부분에 \0
을 추가하여 Unix 추상 소켓(\0abstract
와 같은)을 사용할 수 있습니다. Unix 추상 소켓의 경로는 파일 시스템에서 볼 수 없으며 소켓에 대한 모든 열린 참조가 닫히면 자동으로 사라집니다.
Windows에서 로컬 도메인은 명명된 파이프를 사용하여 구현됩니다. 경로는 \\?\pipe\
또는 \\.\pipe\
의 항목을 참조해야 합니다. 모든 문자가 허용되지만 후자는 ..
시퀀스 해결과 같은 파이프 이름에 대한 일부 처리를 수행할 수 있습니다. 보기에 따라 파이프 네임스페이스는 평면입니다. 파이프는 지속되지 않습니다. 파이프에 대한 마지막 참조가 닫히면 제거됩니다. Unix 도메인 소켓과 달리 Windows는 소유 프로세스가 종료될 때 파이프를 닫고 제거합니다.
JavaScript 문자열 이스케이프에는 다음과 같이 추가 백슬래시 이스케이프를 사용하여 경로를 지정해야 합니다.
net.createServer().listen(path.join('\\\\?\\pipe', process.cwd(), 'myctl'))
클래스: net.BlockList
추가됨: v15.0.0, v14.18.0
BlockList
객체는 특정 IP 주소, IP 범위 또는 IP 서브넷에 대한 인바운드 또는 아웃바운드 액세스를 비활성화하는 규칙을 지정하기 위해 일부 네트워크 API와 함께 사용할 수 있습니다.
blockList.addAddress(address[, type])
추가됨: v15.0.0, v14.18.0
address
<string> | <net.SocketAddress> IPv4 또는 IPv6 주소.type
<string>'ipv4'
또는'ipv6'
. 기본값:'ipv4'
.
주어진 IP 주소를 차단하는 규칙을 추가합니다.
blockList.addRange(start, end[, type])
추가됨: v15.0.0, v14.18.0
start
<string> | <net.SocketAddress> 범위의 시작 IPv4 또는 IPv6 주소.end
<string> | <net.SocketAddress> 범위의 끝 IPv4 또는 IPv6 주소.type
<string>'ipv4'
또는'ipv6'
. 기본값:'ipv4'
.
start
(포함)에서 end
(포함)까지의 IP 주소 범위를 차단하는 규칙을 추가합니다.
blockList.addSubnet(net, prefix[, type])
추가됨: v15.0.0, v14.18.0
net
<string> | <net.SocketAddress> 네트워크 IPv4 또는 IPv6 주소.prefix
<number> CIDR 접두사 비트 수. IPv4의 경우, 이 값은0
에서32
사이여야 합니다. IPv6의 경우, 이 값은0
에서128
사이여야 합니다.type
<string>'ipv4'
또는'ipv6'
. 기본값:'ipv4'
.
서브넷 마스크로 지정된 IP 주소 범위를 차단하는 규칙을 추가합니다.
blockList.check(address[, type])
추가된 버전: v15.0.0, v14.18.0
address
<string> | <net.SocketAddress> 확인할 IP 주소type
<string>'ipv4'
또는'ipv6'
중 하나. 기본값:'ipv4'
.- 반환값: <boolean>
주어진 IP 주소가 BlockList
에 추가된 규칙 중 하나와 일치하면 true
를 반환합니다.
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')) // 출력: true
console.log(blockList.check('10.0.0.3')) // 출력: true
console.log(blockList.check('222.111.111.222')) // 출력: false
// IPv4 주소에 대한 IPv6 표기법도 작동합니다:
console.log(blockList.check('::ffff:7b7b:7b7b', 'ipv6')) // 출력: true
console.log(blockList.check('::ffff:123.123.123.123', 'ipv6')) // 출력: true
blockList.rules
추가된 버전: v15.0.0, v14.18.0
- 유형: <string[]>
차단 목록에 추가된 규칙 목록입니다.
BlockList.isBlockList(value)
추가된 버전: v23.4.0
value
<any> 모든 JS 값value
가net.BlockList
이면true
를 반환합니다.
클래스: net.SocketAddress
추가된 버전: v15.14.0, v14.18.0
new net.SocketAddress([options])
추가된 버전: v15.14.0, v14.18.0
options
<Object>
socketaddress.address
추가된 버전: v15.14.0, v14.18.0
- 타입 <string>
socketaddress.family
추가된 버전: v15.14.0, v14.18.0
- 타입 <string>
'ipv4'
또는'ipv6'
.
socketaddress.flowlabel
추가된 버전: v15.14.0, v14.18.0
- 타입 <number>
socketaddress.port
추가된 버전: v15.14.0, v14.18.0
- 타입 <number>
SocketAddress.parse(input)
추가된 버전: v23.4.0
input
<string> IP 주소와 선택적 포트를 포함하는 입력 문자열(예:123.1.2.3:1234
또는[1::1]:1234
).- 반환: <net.SocketAddress> 파싱에 성공하면
SocketAddress
를 반환합니다. 그렇지 않으면undefined
를 반환합니다.
클래스: net.Server
추가된 버전: v0.1.90
- 확장: <EventEmitter>
이 클래스는 TCP 또는 IPC 서버를 생성하는 데 사용됩니다.
new net.Server([options][, connectionListener])
options
<Object>net.createServer([options][, connectionListener])
를 참조하십시오.connectionListener
<Function> 자동으로'connection'
이벤트에 대한 리스너로 설정됩니다.- 반환: <net.Server>
net.Server
는 다음 이벤트를 가진 EventEmitter
입니다.
이벤트: 'close'
추가된 버전: v0.5.0
서버가 닫힐 때 발생합니다. 연결이 있는 경우 모든 연결이 종료될 때까지 이 이벤트가 발생하지 않습니다.
이벤트: 'connection'
추가된 버전: v0.1.90
- <net.Socket> 연결 객체
새로운 연결이 이루어질 때 발생합니다. socket
은 net.Socket
의 인스턴스입니다.
이벤트: 'error'
추가된 버전: v0.1.90
오류가 발생할 때 발생합니다. net.Socket
과 달리, 'close'
이벤트는 server.close()
가 수동으로 호출되지 않는 한 이 이벤트 직후에 직접 발생하지 않습니다. server.listen()
에 대한 논의의 예시를 참조하십시오.
이벤트: 'listening'
추가된 버전: v0.1.90
server.listen()
호출 후 서버가 바인딩되었을 때 발생합니다.
이벤트: 'drop'
추가된 버전: v18.6.0, v16.17.0
연결 수가 server.maxConnections
임계값에 도달하면 서버는 새 연결을 삭제하고 대신 'drop'
이벤트를 발생시킵니다. TCP 서버인 경우 인수는 다음과 같고, 그렇지 않으면 인수는 undefined
입니다.
data
<Object> 이벤트 리스너에 전달된 인수입니다.
server.address()
[기록]
버전 | 변경 사항 |
---|---|
v18.4.0 | family 속성이 이제 숫자 대신 문자열을 반환합니다. |
v18.0.0 | family 속성이 이제 문자열 대신 숫자를 반환합니다. |
v0.1.90 | 추가됨: v0.1.90 |
IP 소켓에서 수신 중인 경우 운영 체제에서 보고한 바인딩된 address
, 주소 family
이름 및 서버의 port
를 반환합니다(OS 할당 주소를 가져올 때 할당된 포트를 찾는 데 유용함): { port: 12346, family: 'IPv4', address: '127.0.0.1' }
.
파이프 또는 Unix 도메인 소켓에서 수신 중인 서버의 경우 이름이 문자열로 반환됩니다.
const server = net
.createServer(socket => {
socket.end('goodbye\n')
})
.on('error', err => {
// 여기에서 오류를 처리합니다.
throw err
})
// 임의의 사용하지 않는 포트를 가져옵니다.
server.listen(() => {
console.log('opened server on', server.address())
})
server.address()
는 'listening'
이벤트가 발생하기 전이나 server.close()
를 호출한 후에는 null
을 반환합니다.
server.close([callback])
추가됨: v0.1.90
callback
<Function> 서버가 닫힐 때 호출됩니다.- 반환: <net.Server>
서버가 새 연결을 허용하지 않도록 중지하고 기존 연결을 유지합니다. 이 함수는 비동기적이며, 모든 연결이 종료되고 서버가 'close'
이벤트를 발생하면 서버가 최종적으로 닫힙니다. 선택적 callback
은 'close'
이벤트가 발생하면 호출됩니다. 해당 이벤트와 달리 서버가 닫혔을 때 열려 있지 않으면 Error
를 유일한 인수로 하여 호출됩니다.
server[Symbol.asyncDispose]()
추가된 버전: v20.5.0, v18.18.0
server.close()
를 호출하고 서버가 닫혔을 때 완료되는 프로미스를 반환합니다.
server.getConnections(callback)
추가된 버전: v0.9.7
callback
<Function>- 반환값: <net.Server>
서버에서 동시 연결 수를 비동기적으로 가져옵니다. 소켓이 포크로 전송되었을 때 작동합니다.
콜백은 두 개의 인자 err
및 count
를 받아야 합니다.
server.listen()
연결을 수신하기 시작하는 서버를 시작합니다. net.Server
는 수신하는 내용에 따라 TCP 또는 IPC 서버일 수 있습니다.
가능한 시그니처:
server.listen(handle[, backlog][, callback])
server.listen(options[, callback])
- IPC 서버의 경우
server.listen(path[, backlog][, callback])
- TCP 서버의 경우
server.listen([port[, host[, backlog]]][, callback])
이 함수는 비동기적입니다. 서버가 수신을 시작하면 'listening'
이벤트가 발생합니다. 마지막 매개변수 callback
은 'listening'
이벤트의 리스너로 추가됩니다.
모든 listen()
메서드는 대기 중인 연결 큐의 최대 길이를 지정하기 위해 backlog
매개변수를 사용할 수 있습니다. 실제 길이는 Linux의 tcp_max_syn_backlog
및 somaxconn
과 같은 sysctl 설정을 통해 OS에 의해 결정됩니다. 이 매개변수의 기본값은 511(512 아님)입니다.
모든 net.Socket
은 SO_REUSEADDR
로 설정됩니다. 자세한 내용은 socket(7)
을 참조하십시오.
첫 번째 server.listen()
호출 중 오류가 발생했거나 server.close()
가 호출된 경우에만 server.listen()
메서드를 다시 호출할 수 있습니다. 그렇지 않으면 ERR_SERVER_ALREADY_LISTEN
오류가 발생합니다.
수신할 때 발생하는 가장 일반적인 오류 중 하나는 EADDRINUSE
입니다. 이 오류는 다른 서버가 요청된 port
/path
/handle
에서 이미 수신 중일 때 발생합니다. 이 문제를 처리하는 한 가지 방법은 일정 시간이 지난 후 다시 시도하는 것입니다.
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])
추가된 버전: v0.5.10
handle
<Object>backlog
<number>server.listen()
함수의 공통 매개변수callback
<Function>- 반환값: <net.Server>
이미 포트, 유닉스 도메인 소켓 또는 Windows 명명된 파이프에 바인딩된 지정된 handle
에서 연결을 수신하는 서버를 시작합니다.
handle
객체는 서버, 소켓(기본 _handle
멤버가 있는 모든 것) 또는 유효한 파일 설명자인 fd
멤버가 있는 객체가 될 수 있습니다.
파일 설명자를 통한 수신은 Windows에서 지원되지 않습니다.
server.listen(options[, callback])
[기록]
버전 | 변경 사항 |
---|---|
v23.1.0 | reusePort 옵션이 지원됩니다. |
v15.6.0 | AbortSignal 지원이 추가되었습니다. |
v11.4.0 | ipv6Only 옵션이 지원됩니다. |
v0.11.14 | 추가된 버전: v0.11.14 |
options
<Object> 필수. 다음 속성을 지원합니다.backlog
<number>server.listen()
함수의 공통 매개변수.exclusive
<boolean> 기본값:false
host
<string>ipv6Only
<boolean> TCP 서버의 경우ipv6Only
를true
로 설정하면 듀얼 스택 지원이 비활성화됩니다. 즉, 호스트::
에 바인딩한다고 해서0.0.0.0
이 바인딩되지 않습니다. 기본값:false
.reusePort
<boolean> TCP 서버의 경우reusePort
를true
로 설정하면 동일한 호스트의 여러 소켓이 동일한 포트에 바인딩할 수 있습니다. 들어오는 연결은 운영 체제에서 수신 소켓으로 분배합니다. 이 옵션은 Linux 3.9+, DragonFlyBSD 3.6+, FreeBSD 12.0+, Solaris 11.4 및 AIX 7.2.5+와 같은 일부 플랫폼에서만 사용할 수 있습니다. 기본값:false
.path
<string>port
가 지정된 경우 무시됩니다. IPC 연결을 위한 경로 식별을 참조하세요.port
<number>readableAll
<boolean> IPC 서버의 경우 파이프를 모든 사용자가 읽을 수 있도록 합니다. 기본값:false
.signal
<AbortSignal> 수신 서버를 닫는 데 사용할 수 있는 AbortSignal입니다.writableAll
<boolean> IPC 서버의 경우 파이프를 모든 사용자가 쓸 수 있도록 합니다. 기본값:false
.
callback
<Function> 함수.반환값: <net.Server>
port
가 지정되면 server.listen([port[, host[, backlog]]][, callback])
과 동일하게 동작합니다. 그렇지 않고 path
가 지정되면 server.listen(path[, backlog][, callback])
과 동일하게 동작합니다. 둘 다 지정되지 않은 경우 오류가 발생합니다.
exclusive
가 false
(기본값)이면 클러스터 작업자는 동일한 기본 핸들을 사용하여 연결 처리 의무를 공유할 수 있습니다. exclusive
가 true
이면 핸들이 공유되지 않고 포트 공유 시도 시 오류가 발생합니다. 독점 포트에서 수신 대기하는 예는 아래에 나와 있습니다.
server.listen({
host: 'localhost',
port: 80,
exclusive: true,
})
exclusive
가 true
이고 기본 핸들이 공유되는 경우 여러 작업자가 다른 백로그로 핸들을 쿼리할 수 있습니다. 이 경우 마스터 프로세스에 전달된 첫 번째 backlog
가 사용됩니다.
루트 권한으로 IPC 서버를 시작하면 권한 없는 사용자가 서버 경로에 접근할 수 없게 될 수 있습니다. readableAll
및 writableAll
을 사용하면 모든 사용자가 서버에 접근할 수 있습니다.
signal
옵션이 활성화된 경우 해당 AbortController
에서 .abort()
를 호출하는 것은 서버에서 .close()
를 호출하는 것과 유사합니다.
const controller = new AbortController()
server.listen({
host: 'localhost',
port: 80,
signal: controller.signal,
})
// 나중에 서버를 닫고 싶을 때.
controller.abort()
server.listen(path[, backlog][, callback])
추가된 버전: v0.1.90
path
<string> 서버가 수신 대기해야 하는 경로입니다. IPC 연결 경로 식별을 참조하십시오.backlog
<number>server.listen()
함수의 공통 매개변수입니다.callback
<Function>.- 반환 값: <net.Server>
지정된 path
에서 연결을 수신 대기하는 IPC 서버를 시작합니다.
server.listen([port[, host[, backlog]]][, callback])
추가된 버전: v0.1.90
port
<number>host
<string>backlog
<number>server.listen()
함수의 공통 매개변수입니다.callback
<Function>.- 반환 값: <net.Server>
지정된 port
및 host
에서 연결을 수신 대기하는 TCP 서버를 시작합니다.
port
를 생략하거나 0인 경우 운영 체제는 임의의 사용되지 않은 포트를 할당하며, 이 포트는 'listening'
이벤트가 발생한 후 server.address().port
를 사용하여 검색할 수 있습니다.
host
를 생략하면 서버는 IPv6을 사용할 수 있는 경우 지정되지 않은 IPv6 주소 (::
) 또는 그렇지 않은 경우 지정되지 않은 IPv4 주소 (0.0.0.0
)에서 연결을 수락합니다.
대부분의 운영 체제에서 지정되지 않은 IPv6 주소 (::
)를 수신 대기하면 net.Server
도 지정되지 않은 IPv4 주소 (0.0.0.0
)에서 수신 대기할 수 있습니다.
server.listening
Added in: v5.7.0
- <boolean> 서버가 연결을 수신 중인지 여부를 나타냅니다.
server.maxConnections
[기록]
버전 | 변경 사항 |
---|---|
v21.0.0 | maxConnections 를 0 으로 설정하면 들어오는 모든 연결이 끊깁니다. 이전에는 Infinity 로 해석되었습니다. |
v0.2.0 | Added in: v0.2.0 |
연결 수가 server.maxConnections
임계값에 도달하면:
소켓이 child_process.fork()
를 사용하여 자식에게 전송된 후에는 이 옵션을 사용하지 않는 것이 좋습니다.
server.dropMaxConnection
Added in: v23.1.0
연결 수가 [server.maxConnections
][] 임계값에 도달하면 연결을 닫기 시작하려면 이 속성을 true
로 설정하십시오. 이 설정은 클러스터 모드에서만 유효합니다.
server.ref()
Added in: v0.9.1
- 반환: <net.Server>
unref()
의 반대입니다. 이전에 unref
된 서버에서 ref()
를 호출하면 해당 서버가 유일하게 남아 있는 서버인 경우에도 프로그램이 종료되지 않습니다(기본 동작). 서버가 ref
된 경우 ref()
를 다시 호출해도 아무런 효과가 없습니다.
server.unref()
Added in: v0.9.1
- 반환: <net.Server>
서버에서 unref()
를 호출하면 이벤트 시스템에서 유일하게 활성 상태인 서버인 경우 프로그램이 종료될 수 있습니다. 서버가 이미 unref
된 경우 unref()
를 다시 호출해도 아무런 효과가 없습니다.
클래스: net.Socket
Added in: v0.3.4
- 확장: <stream.Duplex>
이 클래스는 TCP 소켓 또는 스트리밍 IPC 엔드포인트(Windows에서는 명명된 파이프를 사용하고 다른 경우에는 Unix 도메인 소켓을 사용함)의 추상화입니다. 또한 EventEmitter
입니다.
net.Socket
은 사용자가 생성하여 서버와 직접 상호 작용하는 데 사용할 수 있습니다. 예를 들어 net.createConnection()
에서 반환되므로 사용자는 이를 사용하여 서버와 통신할 수 있습니다.
또한 Node.js에서 생성되어 연결이 수신될 때 사용자에게 전달될 수도 있습니다. 예를 들어 net.Server
에서 발생한 'connection'
이벤트의 수신자에게 전달되므로 사용자는 이를 사용하여 클라이언트와 상호 작용할 수 있습니다.
new net.Socket([options])
[연혁]
버전 | 변경 사항 |
---|---|
v15.14.0 | AbortSignal 지원이 추가되었습니다. |
v12.10.0 | onread 옵션이 추가되었습니다. |
v0.3.4 | 추가됨: v0.3.4 |
options
<Object> 사용 가능한 옵션은 다음과 같습니다.allowHalfOpen
<boolean>false
로 설정하면 소켓은 읽기 측이 끝나면 쓰기 측을 자동으로 종료합니다. 자세한 내용은net.createServer()
및'end'
이벤트를 참조하십시오. 기본값:false
.fd
<number> 지정된 경우 주어진 파일 설명자로 기존 소켓을 래핑하고, 그렇지 않으면 새 소켓이 생성됩니다.onread
<Object> 지정된 경우 수신 데이터는 단일buffer
에 저장되고 소켓에 데이터가 도착하면 제공된callback
으로 전달됩니다. 이렇게 하면 스트리밍 기능이 데이터를 제공하지 않게 됩니다. 소켓은'error'
,'end'
,'close'
와 같은 이벤트를 평소와 같이 발생시킵니다.pause()
및resume()
과 같은 메서드도 예상대로 작동합니다.buffer
<Buffer> | <Uint8Array> | <Function> 수신 데이터를 저장하는 데 사용할 재사용 가능한 메모리 청크 또는 그러한 메모리를 반환하는 함수입니다.callback
<Function> 이 함수는 수신 데이터의 모든 청크에 대해 호출됩니다.buffer
에 기록된 바이트 수와buffer
에 대한 참조의 두 가지 인수가 전달됩니다. 이 함수에서false
를 반환하면 소켓이 암시적으로pause()
됩니다. 이 함수는 전역 컨텍스트에서 실행됩니다.readable
<boolean>fd
가 전달될 때 소켓에서 읽기를 허용합니다. 그렇지 않으면 무시됩니다. 기본값:false
.signal
<AbortSignal> 소켓을 파괴하는 데 사용할 수 있는 Abort 신호입니다.writable
<boolean>fd
가 전달될 때 소켓에서 쓰기를 허용합니다. 그렇지 않으면 무시됩니다. 기본값:false
.
반환값: <net.Socket>
새 소켓 객체를 만듭니다.
새로 생성된 소켓은 TCP 소켓이거나 스트리밍 IPC 엔드포인트일 수 있으며, 무엇에 connect()
하는지에 따라 달라집니다.
이벤트: 'close'
추가된 버전: v0.1.90
hadError
<boolean> 소켓에 전송 오류가 있었으면true
입니다.
소켓이 완전히 닫히면 한 번 발생합니다. 인수 hadError
는 소켓이 전송 오류로 인해 닫혔는지 여부를 나타내는 부울 값입니다.
이벤트: 'connect'
추가된 버전: v0.1.90
소켓 연결이 성공적으로 설정되면 발생합니다. net.createConnection()
을 참조하세요.
이벤트: 'connectionAttempt'
추가된 버전: v21.6.0, v20.12.0
ip
<string> 소켓이 연결을 시도하는 IP입니다.port
<number> 소켓이 연결을 시도하는 포트입니다.family
<number> IP의 패밀리입니다. IPv6의 경우6
또는 IPv4의 경우4
일 수 있습니다.
새 연결 시도가 시작되면 발생합니다. socket.connect(options)
에서 패밀리 자동 선택 알고리즘이 활성화된 경우 여러 번 발생할 수 있습니다.
이벤트: 'connectionAttemptFailed'
추가된 버전: v21.6.0, v20.12.0
ip
<string> 소켓이 연결을 시도한 IP입니다.port
<number> 소켓이 연결을 시도한 포트입니다.family
<number> IP의 패밀리입니다. IPv6의 경우6
또는 IPv4의 경우4
일 수 있습니다.error
<Error> 실패와 관련된 오류입니다.
연결 시도가 실패하면 발생합니다. socket.connect(options)
에서 패밀리 자동 선택 알고리즘이 활성화된 경우 여러 번 발생할 수 있습니다.
이벤트: 'connectionAttemptTimeout'
추가된 버전: v21.6.0, v20.12.0
ip
<string> 소켓이 연결을 시도한 IP 주소입니다.port
<number> 소켓이 연결을 시도한 포트 번호입니다.family
<number> IP 주소의 패밀리입니다. IPv6의 경우6
, IPv4의 경우4
일 수 있습니다.
연결 시도 시간이 초과되었을 때 발생합니다. 이 이벤트는 socket.connect(options)
에서 패밀리 자동 선택 알고리즘이 활성화된 경우에만 (그리고 여러 번 발생할 수 있습니다) 발생합니다.
이벤트: 'data'
추가된 버전: v0.1.90
데이터가 수신될 때 발생합니다. data
인자는 Buffer
또는 String
이 됩니다. 데이터의 인코딩은 socket.setEncoding()
으로 설정됩니다.
Socket
이 'data'
이벤트를 발생시킬 때 리스너가 없으면 데이터가 손실됩니다.
이벤트: 'drain'
추가된 버전: v0.1.90
쓰기 버퍼가 비워질 때 발생합니다. 업로드를 조절하는 데 사용할 수 있습니다.
참고: socket.write()
의 반환 값.
이벤트: 'end'
추가된 버전: v0.1.90
소켓의 다른 쪽 끝에서 전송 종료 신호를 보내 소켓의 읽기 가능한 쪽을 종료할 때 발생합니다.
기본적으로 (allowHalfOpen
이 false
인 경우) 소켓은 전송 종료 패킷을 다시 보내고 보류 중인 쓰기 큐를 모두 쓰고 나면 파일 디스크립터를 파괴합니다. 그러나 allowHalfOpen
이 true
로 설정된 경우 소켓은 자동으로 쓰기 가능한 쪽을 end()
하지 않으므로 사용자가 임의의 양의 데이터를 쓸 수 있습니다. 연결을 닫으려면(즉, FIN 패킷을 다시 보내려면) 사용자가 명시적으로 end()
를 호출해야 합니다.
이벤트: 'error'
추가된 버전: v0.1.90
오류가 발생했을 때 발생합니다. 'close'
이벤트는 이 이벤트 바로 뒤에 호출됩니다.
이벤트: 'lookup'
[기록]
버전 | 변경 사항 |
---|---|
v5.10.0 | host 매개변수가 이제 지원됩니다. |
v0.11.3 | 추가된 버전: v0.11.3 |
호스트 이름을 확인한 후 연결하기 전에 발생합니다. Unix 소켓에는 적용되지 않습니다.
err
<Error> | <null> 오류 객체입니다.dns.lookup()
을 참조하십시오.address
<string> IP 주소입니다.family
<number> | <null> 주소 유형입니다.dns.lookup()
을 참조하십시오.host
<string> 호스트 이름입니다.
이벤트: 'ready'
추가된 버전: v9.11.0
소켓을 사용할 준비가 되었을 때 발생합니다.
'connect'
직후에 트리거됩니다.
이벤트: 'timeout'
추가된 버전: v0.1.90
소켓이 비활성으로 인해 시간 초과되면 발생합니다. 이것은 소켓이 유휴 상태임을 알리는 용도일 뿐입니다. 사용자는 수동으로 연결을 닫아야 합니다.
참고: socket.setTimeout()
.
socket.address()
[기록]
버전 | 변경 사항 |
---|---|
v18.4.0 | family 속성은 이제 숫자가 아닌 문자열을 반환합니다. |
v18.0.0 | family 속성은 이제 문자열이 아닌 숫자를 반환합니다. |
v0.1.90 | 추가된 버전: v0.1.90 |
- 반환 값: <Object>
운영 체제에서 보고한 대로 소켓의 바인딩된 address
, 주소 family
이름 및 port
를 반환합니다: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
socket.autoSelectFamilyAttemptedAddresses
추가된 버전: v19.4.0, v18.18.0
이 속성은 socket.connect(options)
에서 패밀리 자동 선택 알고리즘이 활성화된 경우에만 존재하며, 시도된 주소의 배열입니다.
각 주소는 $IP:$PORT
형식의 문자열입니다. 연결이 성공하면 마지막 주소가 소켓이 현재 연결된 주소입니다.
socket.bufferSize
추가된 버전: v0.3.8
지원 중단된 버전: v14.6.0
[안정성: 0 - 지원 중단됨]
안정성: 0 안정성: 0 - 지원 중단됨: 대신 writable.writableLength
를 사용하세요.
이 속성은 쓰기를 위해 버퍼링된 문자 수를 보여줍니다. 버퍼에는 인코딩 후 길이가 아직 알려지지 않은 문자열이 포함될 수 있습니다. 따라서 이 숫자는 버퍼의 바이트 수에 대한 근사치일 뿐입니다.
net.Socket
은 socket.write()
가 항상 작동한다는 속성을 가지고 있습니다. 이는 사용자가 빠르게 시작하고 실행할 수 있도록 돕기 위한 것입니다. 컴퓨터가 소켓에 쓰여지는 데이터의 양을 항상 따라갈 수 있는 것은 아닙니다. 네트워크 연결이 단순히 너무 느릴 수도 있습니다. Node.js는 소켓에 쓰여진 데이터를 내부적으로 큐에 넣고 가능할 때 네트워크를 통해 보냅니다.
이 내부 버퍼링의 결과로 메모리가 늘어날 수 있습니다. bufferSize
가 크거나 증가하는 사용자는 socket.pause()
및 socket.resume()
를 사용하여 프로그램에서 데이터 흐름을 "조정"해야 합니다.
socket.bytesRead
추가된 버전: v0.5.3
수신된 바이트 수입니다.
socket.bytesWritten
추가된 버전: v0.5.3
전송된 바이트 수입니다.
socket.connect()
주어진 소켓에서 연결을 시작합니다.
가능한 서명:
socket.connect(options[, connectListener])
socket.connect(path[, connectListener])
IPC 연결의 경우.socket.connect(port[, host][, connectListener])
TCP 연결의 경우.- 반환: <net.Socket> 소켓 자체.
이 함수는 비동기적입니다. 연결이 설정되면 'connect'
이벤트가 발생합니다. 연결에 문제가 있는 경우, 'connect'
이벤트 대신 오류가 'error'
리스너에 전달된 'error'
이벤트가 발생합니다. 마지막 매개변수 connectListener
가 제공된 경우, 'connect'
이벤트에 대한 리스너로 한 번 추가됩니다.
이 함수는 'close'
가 발생한 후 소켓을 다시 연결하는 데만 사용해야 하며, 그렇지 않으면 정의되지 않은 동작으로 이어질 수 있습니다.
socket.connect(options[, connectListener])
[기록]
버전 | 변경 사항 |
---|---|
v19.4.0 | autoSelectFamily 옵션의 기본값을 런타임 시 setDefaultAutoSelectFamily 를 사용하거나 명령줄 옵션 --enable-network-family-autoselection 을 통해 변경할 수 있습니다. |
v20.0.0, v18.18.0 | autoSelectFamily 옵션의 기본값은 이제 true입니다. --enable-network-family-autoselection CLI 플래그의 이름이 --network-family-autoselection 으로 변경되었습니다. 이전 이름은 이제 별칭이지만 권장하지 않습니다. |
v19.3.0, v18.13.0 | autoSelectFamily 옵션이 추가되었습니다. |
v17.7.0, v16.15.0 | noDelay , keepAlive , keepAliveInitialDelay 옵션이 이제 지원됩니다. |
v6.0.0 | hints 옵션은 이제 모든 경우에 기본값이 0 입니다. 이전에는 family 옵션이 없는 경우 `dns.ADDRCONFIG |
v5.11.0 | hints 옵션이 이제 지원됩니다. |
v0.1.90 | 추가된 버전: v0.1.90 |
options
<객체>connectListener
<함수>socket.connect()
메서드의 공통 매개변수입니다.'connect'
이벤트에 대한 리스너로 한 번 추가됩니다.- 반환: <net.Socket> 소켓 자체.
주어진 소켓에서 연결을 시작합니다. 일반적으로 이 메서드는 필요하지 않으며, 소켓은 net.createConnection()
으로 생성 및 열어야 합니다. 사용자 정의 소켓을 구현할 때만 사용하세요.
TCP 연결의 경우 사용 가능한 options
는 다음과 같습니다.
autoSelectFamily
<boolean>:true
로 설정하면 RFC 8305의 섹션 5를 느슨하게 구현하는 패밀리 자동 감지 알고리즘이 활성화됩니다. 조회에 전달된all
옵션은true
로 설정되고, 소켓은 연결이 설정될 때까지 얻은 모든 IPv6 및 IPv4 주소에 순차적으로 연결을 시도합니다. 첫 번째로 반환된 AAAA 주소가 먼저 시도되고, 그 다음으로 첫 번째로 반환된 A 주소, 그 다음으로 두 번째로 반환된 AAAA 주소 등이 시도됩니다. 각 연결 시도(마지막 시도 제외)에는autoSelectFamilyAttemptTimeout
옵션으로 지정된 시간이 주어지며, 이 시간 내에 연결이 완료되지 않으면 다음 주소를 시도합니다.family
옵션이0
이 아니거나localAddress
가 설정된 경우 무시됩니다. 최소한 하나의 연결이 성공하면 연결 오류가 발생하지 않습니다. 모든 연결 시도가 실패하면 실패한 모든 시도가 포함된 단일AggregateError
가 발생합니다. 기본값:net.getDefaultAutoSelectFamily()
.autoSelectFamilyAttemptTimeout
<number>:autoSelectFamily
옵션을 사용할 때 연결 시도가 완료될 때까지 기다리는 시간(밀리초)입니다. 양의 정수가10
보다 작으면10
이 대신 사용됩니다. 기본값:net.getDefaultAutoSelectFamilyAttemptTimeout()
.family
<number>: IP 스택 버전입니다.4
,6
또는0
이어야 합니다. 값0
은 IPv4 및 IPv6 주소가 모두 허용됨을 나타냅니다. 기본값:0
.hints
<number> 선택적dns.lookup()
힌트.host
<string> 소켓이 연결해야 하는 호스트입니다. 기본값:'localhost'
.keepAlive
<boolean>true
로 설정하면 연결이 설정된 직후socket.setKeepAlive()
에서 수행하는 것과 유사하게 소켓에서 keep-alive 기능이 활성화됩니다. 기본값:false
.keepAliveInitialDelay
<number> 양수로 설정하면 유휴 소켓에서 첫 번째 keepalive 프로브가 전송되기 전의 초기 지연 시간을 설정합니다. 기본값:0
.localAddress
<string> 소켓이 연결해야 하는 로컬 주소입니다.localPort
<number> 소켓이 연결해야 하는 로컬 포트입니다.lookup
<함수> 사용자 정의 조회 함수입니다. 기본값:dns.lookup()
.noDelay
<boolean>true
로 설정하면 소켓이 설정된 직후 Nagle 알고리즘 사용이 비활성화됩니다. 기본값:false
.port
<number> 필수. 소켓이 연결해야 하는 포트입니다.blockList
<net.BlockList>blockList
는 특정 IP 주소, IP 범위 또는 IP 서브넷에 대한 아웃바운드 액세스를 비활성화하는 데 사용할 수 있습니다.
IPC 연결의 경우 사용 가능한 options
는 다음과 같습니다.
path
<string> 필수. 클라이언트가 연결해야 하는 경로입니다. IPC 연결을 위한 경로 식별을 참조하세요. 제공된 경우 위의 TCP 관련 옵션은 무시됩니다.
socket.connect(path[, connectListener])
path
<string> 클라이언트가 연결해야 하는 경로입니다. IPC 연결 경로 식별을 참조하십시오.connectListener
<Function>socket.connect()
메서드의 공통 매개변수입니다.'connect'
이벤트에 대한 리스너로 한 번 추가됩니다.- 반환 값: <net.Socket> 소켓 자체입니다.
지정된 소켓에서 IPC 연결을 시작합니다.
options
로 { path: path }
가 전달되어 호출되는 socket.connect(options[, connectListener])
의 별칭입니다.
socket.connect(port[, host][, connectListener])
추가된 버전: v0.1.90
port
<number> 클라이언트가 연결해야 하는 포트입니다.host
<string> 클라이언트가 연결해야 하는 호스트입니다.connectListener
<Function>socket.connect()
메서드의 공통 매개변수입니다.'connect'
이벤트에 대한 리스너로 한 번 추가됩니다.- 반환 값: <net.Socket> 소켓 자체입니다.
지정된 소켓에서 TCP 연결을 시작합니다.
options
로 {port: port, host: host}
가 전달되어 호출되는 socket.connect(options[, connectListener])
의 별칭입니다.
socket.connecting
추가된 버전: v6.1.0
true
이면, socket.connect(options[, connectListener])
가 호출되었지만 아직 완료되지 않은 상태입니다. 소켓이 연결될 때까지 true
로 유지되며, 연결되면 false
로 설정되고 'connect'
이벤트가 발생합니다. socket.connect(options[, connectListener])
콜백은 'connect'
이벤트에 대한 리스너입니다.
socket.destroy([error])
추가된 버전: v0.1.90
error
<Object>- 반환 값: <net.Socket>
이 소켓에서 더 이상 I/O 활동이 발생하지 않도록 합니다. 스트림을 파괴하고 연결을 닫습니다.
자세한 내용은 writable.destroy()
를 참조하십시오.
socket.destroyed
- <boolean> 연결이 파괴되었는지 여부를 나타냅니다. 연결이 파괴되면 더 이상 해당 연결을 사용하여 데이터를 전송할 수 없습니다.
자세한 내용은 writable.destroyed
를 참조하십시오.
socket.destroySoon()
추가된 버전: v0.3.4
모든 데이터가 쓰여진 후 소켓을 파괴합니다. 'finish'
이벤트가 이미 발생한 경우 소켓은 즉시 파괴됩니다. 소켓이 여전히 쓰기 가능한 상태인 경우 암시적으로 socket.end()
를 호출합니다.
socket.end([data[, encoding]][, callback])
추가된 버전: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> data가string
일 때만 사용됩니다. 기본값:'utf8'
.callback
<Function> 소켓이 완료되었을 때 호출되는 선택적 콜백입니다.- 반환 값: <net.Socket> 소켓 자체입니다.
소켓을 절반 닫습니다. 즉, FIN 패킷을 보냅니다. 서버가 여전히 일부 데이터를 보낼 수 있습니다.
자세한 내용은 writable.end()
를 참조하십시오.
socket.localAddress
추가된 버전: v0.9.6
원격 클라이언트가 연결하는 로컬 IP 주소의 문자열 표현입니다. 예를 들어, '0.0.0.0'
에서 수신 대기하는 서버에서 클라이언트가 '192.168.1.1'
에 연결하는 경우 socket.localAddress
의 값은 '192.168.1.1'
이 됩니다.
socket.localPort
추가된 버전: v0.9.6
로컬 포트의 숫자 표현입니다. 예를 들어 80
또는 21
입니다.
socket.localFamily
추가된 버전: v18.8.0, v16.18.0
로컬 IP 패밀리의 문자열 표현입니다. 'IPv4'
또는 'IPv6'
.
socket.pause()
- 반환: <net.Socket> 소켓 자체입니다.
데이터 읽기를 일시 중지합니다. 즉, 'data'
이벤트가 발생하지 않습니다. 업로드를 조절하는 데 유용합니다.
socket.pending
추가된 버전: v11.2.0, v10.16.0
.connect()
가 아직 호출되지 않았거나 아직 연결 중이기 때문에 소켓이 아직 연결되지 않은 경우 true
입니다( socket.connecting
참조).
socket.ref()
추가된 버전: v0.9.1
- 반환: <net.Socket> 소켓 자체입니다.
unref()
의 반대입니다. 이전에 unref
된 소켓에서 ref()
를 호출하면 유일한 소켓이 남은 경우에도 프로그램이 종료되지 않습니다(기본 동작). 소켓이 ref
된 경우 ref
를 다시 호출해도 아무런 효과가 없습니다.
socket.remoteAddress
추가된 버전: v0.5.10
원격 IP 주소의 문자열 표현입니다. 예를 들어 '74.125.127.100'
또는 '2001:4860:a005::68'
입니다. 소켓이 파괴된 경우(예: 클라이언트가 연결을 끊은 경우) 값은 undefined
일 수 있습니다.
socket.remoteFamily
추가된 버전: v0.11.14
원격 IP 패밀리의 문자열 표현입니다. 'IPv4'
또는 'IPv6'
입니다. 소켓이 파괴된 경우(예: 클라이언트가 연결을 끊은 경우) 값은 undefined
일 수 있습니다.
socket.remotePort
추가된 버전: v0.5.10
원격 포트의 숫자 표현입니다. 예를 들어, 80
또는 21
입니다. 소켓이 파괴된 경우(예: 클라이언트 연결이 끊긴 경우) 값은 undefined
일 수 있습니다.
socket.resetAndDestroy()
추가된 버전: v18.3.0, v16.17.0
- 반환: <net.Socket>
RST 패킷을 전송하고 스트림을 파괴하여 TCP 연결을 닫습니다. 이 TCP 소켓이 연결 상태인 경우, 연결되는 즉시 RST 패킷을 전송하고 해당 TCP 소켓을 파괴합니다. 그렇지 않으면 ERR_SOCKET_CLOSED
오류와 함께 socket.destroy
를 호출합니다. 이것이 TCP 소켓이 아닌 경우(예: 파이프) 이 메서드를 호출하면 즉시 ERR_INVALID_HANDLE_TYPE
오류가 발생합니다.
socket.resume()
- 반환: <net.Socket> 소켓 자체.
socket.pause()
호출 후 읽기를 재개합니다.
socket.setEncoding([encoding])
추가된 버전: v0.1.90
encoding
<문자열>- 반환: <net.Socket> 소켓 자체.
소켓의 인코딩을 Readable 스트림으로 설정합니다. 자세한 내용은 readable.setEncoding()
을 참조하세요.
socket.setKeepAlive([enable][, initialDelay])
[기록]
버전 | 변경 사항 |
---|---|
v13.12.0, v12.17.0 | TCP_KEEPCNT 및 TCP_KEEPINTVL 소켓 옵션에 대한 새로운 기본값이 추가되었습니다. |
v0.1.92 | 추가된 버전: v0.1.92 |
enable
<부울> 기본값:false
initialDelay
<숫자> 기본값:0
- 반환: <net.Socket> 소켓 자체.
활성 유지 기능을 활성화/비활성화하고 선택적으로 유휴 소켓에서 첫 번째 활성 유지 프로브가 전송되기 전의 초기 지연 시간을 설정합니다.
initialDelay
(밀리초)를 설정하여 마지막으로 수신된 데이터 패킷과 첫 번째 활성 유지 프로브 사이의 지연 시간을 설정합니다. initialDelay
에 0
을 설정하면 기본값(또는 이전) 설정에서 값이 변경되지 않습니다.
활성 유지 기능을 활성화하면 다음 소켓 옵션이 설정됩니다.
SO_KEEPALIVE=1
TCP_KEEPIDLE=initialDelay
TCP_KEEPCNT=10
TCP_KEEPINTVL=1
socket.setNoDelay([noDelay])
추가된 버전: v0.1.90
noDelay
<boolean> 기본값:true
- 반환값: <net.Socket> 소켓 자체.
Nagle 알고리즘 사용을 활성화/비활성화합니다.
TCP 연결이 생성되면 Nagle 알고리즘이 활성화됩니다.
Nagle 알고리즘은 네트워크를 통해 전송되기 전에 데이터를 지연시킵니다. 이를 통해 대기 시간을 희생하여 처리량을 최적화하려고 시도합니다.
noDelay
에 true
를 전달하거나 인수를 전달하지 않으면 소켓에 대해 Nagle 알고리즘이 비활성화됩니다. noDelay
에 false
를 전달하면 Nagle 알고리즘이 활성화됩니다.
socket.setTimeout(timeout[, callback])
[기록]
버전 | 변경 사항 |
---|---|
v18.0.0 | callback 인수에 유효하지 않은 콜백을 전달하면 이제 ERR_INVALID_CALLBACK 대신 ERR_INVALID_ARG_TYPE 오류가 발생합니다. |
v0.1.90 | 추가된 버전: v0.1.90 |
timeout
<number>callback
<Function>- 반환값: <net.Socket> 소켓 자체.
소켓에서 timeout
밀리초 동안 활동이 없으면 소켓이 시간 초과되도록 설정합니다. 기본적으로 net.Socket
에는 시간 초과가 없습니다.
유휴 시간 초과가 트리거되면 소켓은 'timeout'
이벤트를 수신하지만 연결이 끊어지지는 않습니다. 사용자는 연결을 종료하기 위해 socket.end()
또는 socket.destroy()
를 수동으로 호출해야 합니다.
socket.setTimeout(3000)
socket.on('timeout', () => {
console.log('소켓 시간 초과')
socket.end()
})
timeout
이 0이면 기존 유휴 시간 초과가 비활성화됩니다.
선택적 callback
매개변수는 'timeout'
이벤트에 대한 일회성 리스너로 추가됩니다.
socket.timeout
추가된 버전: v10.7.0
socket.setTimeout()
에 의해 설정된 소켓 타임아웃 (밀리초 단위)입니다. 타임아웃이 설정되지 않은 경우 undefined
입니다.
socket.unref()
추가된 버전: v0.9.1
- 반환: <net.Socket> 소켓 자체.
소켓에서 unref()
를 호출하면 이벤트 시스템에서 이 소켓이 유일하게 활성화된 소켓인 경우 프로그램이 종료될 수 있습니다. 소켓이 이미 unref
된 경우 unref()
를 다시 호출해도 아무런 효과가 없습니다.
socket.write(data[, encoding][, callback])
추가된 버전: v0.1.90
data
<string> | <Buffer> | <Uint8Array>encoding
<string> data가string
일 때만 사용됩니다. 기본값:utf8
.callback
<Function>- 반환: <boolean>
소켓에 데이터를 보냅니다. 두 번째 매개변수는 문자열의 경우 인코딩을 지정합니다. 기본값은 UTF8 인코딩입니다.
전체 데이터가 커널 버퍼로 성공적으로 플러시되면 true
를 반환합니다. 데이터의 일부 또는 전부가 사용자 메모리에 큐에 저장된 경우 false
를 반환합니다. 버퍼가 다시 비면 'drain'
이벤트가 발생합니다.
선택적 callback
매개변수는 데이터가 최종적으로 기록되면 실행되며, 즉시 실행되지 않을 수 있습니다.
자세한 내용은 Writable
스트림 write()
메서드를 참조하십시오.
socket.readyState
추가된 버전: v0.5.0
이 속성은 연결 상태를 문자열로 나타냅니다.
- 스트림이 연결 중인 경우
socket.readyState
는opening
입니다. - 스트림을 읽고 쓸 수 있는 경우
open
입니다. - 스트림을 읽을 수 있지만 쓸 수 없는 경우
readOnly
입니다. - 스트림을 읽을 수 없고 쓸 수 있는 경우
writeOnly
입니다.
net.connect()
net.createConnection()
의 별칭입니다.
가능한 서명:
net.connect(options[, connectListener])
- IPC 연결의 경우
net.connect(path[, connectListener])
입니다. - TCP 연결의 경우
net.connect(port[, host][, connectListener])
입니다.
net.connect(options[, connectListener])
추가된 버전: v0.7.0
options
<Object>connectListener
<Function>- 반환 값: <net.Socket>
net.createConnection(options[, connectListener])
의 별칭입니다.
net.connect(path[, connectListener])
추가된 버전: v0.1.90
path
<string>connectListener
<Function>- 반환 값: <net.Socket>
net.createConnection(path[, connectListener])
의 별칭입니다.
net.connect(port[, host][, connectListener])
추가된 버전: v0.1.90
port
<number>host
<string>connectListener
<Function>- 반환 값: <net.Socket>
net.createConnection(port[, host][, connectListener])
의 별칭입니다.
net.createConnection()
새로운 net.Socket
을 생성하고 즉시 socket.connect()
로 연결을 시작한 다음 연결을 시작하는 net.Socket
을 반환하는 팩토리 함수입니다.
연결이 설정되면 반환된 소켓에서 'connect'
이벤트가 발생합니다. 마지막 매개변수 connectListener
가 제공된 경우, 한 번 'connect'
이벤트에 대한 리스너로 추가됩니다.
가능한 시그니처:
net.createConnection(options[, connectListener])
- IPC 연결의 경우
net.createConnection(path[, connectListener])
- TCP 연결의 경우
net.createConnection(port[, host][, connectListener])
net.connect()
함수는 이 함수의 별칭입니다.
net.createConnection(options[, connectListener])
추가된 버전: v0.1.90
options
<Object> 필수 항목.new net.Socket([options])
호출과socket.connect(options[, connectListener])
메서드 모두에 전달됩니다.connectListener
<Function>net.createConnection()
함수의 일반적인 매개변수입니다. 제공된 경우, 반환된 소켓에서'connect'
이벤트에 대한 리스너로 한 번 추가됩니다.- 반환값: <net.Socket> 연결을 시작하는 데 사용되는 새로 생성된 소켓입니다.
사용 가능한 옵션은 new net.Socket([options])
및 socket.connect(options[, connectListener])
를 참조하십시오.
추가 옵션:
timeout
<number> 설정된 경우, 소켓이 생성된 후 연결을 시작하기 전에socket.setTimeout(timeout)
을 호출하는 데 사용됩니다.
다음은 net.createServer()
섹션에 설명된 에코 서버의 클라이언트 예입니다.
import net from 'node:net'
const client = net.createConnection({ port: 8124 }, () => {
// 'connect' 리스너.
console.log('서버에 연결됨!')
client.write('world!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('서버에서 연결이 끊김')
})
const net = require('node:net')
const client = net.createConnection({ port: 8124 }, () => {
// 'connect' 리스너.
console.log('서버에 연결됨!')
client.write('world!\r\n')
})
client.on('data', data => {
console.log(data.toString())
client.end()
})
client.on('end', () => {
console.log('서버에서 연결이 끊김')
})
소켓 /tmp/echo.sock
에 연결하려면:
const client = net.createConnection({ path: '/tmp/echo.sock' })
다음은 port
및 onread
옵션을 사용하는 클라이언트의 예입니다. 이 경우 onread
옵션은 new net.Socket([options])
를 호출하는 데만 사용되고 port
옵션은 socket.connect(options[, connectListener])
를 호출하는 데 사용됩니다.
import net from 'node:net'
import { Buffer } from 'node:buffer'
net.createConnection({
port: 8124,
onread: {
// 소켓에서 읽을 때마다 4KiB 버퍼를 재사용합니다.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// 수신된 데이터는 `buf`에서 0부터 `nread`까지 사용할 수 있습니다.
console.log(buf.toString('utf8', 0, nread))
},
},
})
const net = require('node:net')
net.createConnection({
port: 8124,
onread: {
// 소켓에서 읽을 때마다 4KiB 버퍼를 재사용합니다.
buffer: Buffer.alloc(4 * 1024),
callback: function (nread, buf) {
// 수신된 데이터는 `buf`에서 0부터 `nread`까지 사용할 수 있습니다.
console.log(buf.toString('utf8', 0, nread))
},
},
})
net.createConnection(path[, connectListener])
추가된 버전: v0.1.90
path
<string> 소켓이 연결해야 하는 경로입니다.socket.connect(path[, connectListener])
로 전달됩니다. IPC 연결 경로 식별을 참조하십시오.connectListener
<Function>net.createConnection()
함수의 공통 매개변수로, 시작 소켓의'connect'
이벤트에 대한 "once" 리스너입니다.socket.connect(path[, connectListener])
로 전달됩니다.- 반환값: <net.Socket> 연결을 시작하는 데 사용되는 새로 생성된 소켓입니다.
IPC 연결을 시작합니다.
이 함수는 모든 옵션이 기본값으로 설정된 새로운 net.Socket
을 생성하고, 즉시 socket.connect(path[, connectListener])
로 연결을 시작한 다음, 연결을 시작하는 net.Socket
을 반환합니다.
net.createConnection(port[, host][, connectListener])
추가된 버전: v0.1.90
port
<number> 소켓이 연결해야 하는 포트입니다.socket.connect(port[, host][, connectListener])
로 전달됩니다.host
<string> 소켓이 연결해야 하는 호스트입니다.socket.connect(port[, host][, connectListener])
로 전달됩니다. 기본값:'localhost'
.connectListener
<Function>net.createConnection()
함수의 공통 매개변수로, 시작 소켓의'connect'
이벤트에 대한 "once" 리스너입니다.socket.connect(port[, host][, connectListener])
로 전달됩니다.- 반환값: <net.Socket> 연결을 시작하는 데 사용되는 새로 생성된 소켓입니다.
TCP 연결을 시작합니다.
이 함수는 모든 옵션이 기본값으로 설정된 새로운 net.Socket
을 생성하고, 즉시 socket.connect(port[, host][, connectListener])
로 연결을 시작한 다음, 연결을 시작하는 net.Socket
을 반환합니다.
net.createServer([options][, connectionListener])
[기록]
버전 | 변경 사항 |
---|---|
v20.1.0, v18.17.0 | highWaterMark 옵션이 이제 지원됩니다. |
v17.7.0, v16.15.0 | noDelay , keepAlive , keepAliveInitialDelay 옵션이 이제 지원됩니다. |
v0.5.0 | v0.5.0에 추가됨 |
options
<Object>allowHalfOpen
<boolean>false
로 설정하면, 소켓의 읽기 가능한 측면이 끝나면 쓰기 가능한 측면이 자동으로 종료됩니다. 기본값:false
.highWaterMark
<number> 선택적으로 모든net.Socket
의readableHighWaterMark
및writableHighWaterMark
를 재정의합니다. 기본값:stream.getDefaultHighWaterMark()
를 참조하십시오.keepAlive
<boolean>true
로 설정하면 새 들어오는 연결을 받은 직후에 소켓에서 keep-alive 기능이 활성화됩니다.socket.setKeepAlive()
와 유사하게 수행됩니다. 기본값:false
.keepAliveInitialDelay
<number> 양수로 설정하면 유휴 소켓에서 첫 번째 keepalive 프로브를 보내기 전의 초기 지연 시간을 설정합니다. 기본값:0
.noDelay
<boolean>true
로 설정하면 새 들어오는 연결을 받은 직후에 Nagle 알고리즘 사용을 비활성화합니다. 기본값:false
.pauseOnConnect
<boolean> 들어오는 연결에서 소켓을 일시 중지해야 하는지 여부를 나타냅니다. 기본값:false
.blockList
<net.BlockList>blockList
는 특정 IP 주소, IP 범위 또는 IP 서브넷에 대한 인바운드 액세스를 비활성화하는 데 사용할 수 있습니다. 서버가 리버스 프록시, NAT 등에 있는 경우 차단 목록에 대해 확인된 주소가 프록시의 주소 또는 NAT에서 지정한 주소이기 때문에 작동하지 않습니다.
connectionListener
<Function>'connection'
이벤트에 대한 리스너로 자동으로 설정됩니다.반환값: <net.Server>
새로운 TCP 또는 IPC 서버를 만듭니다.
allowHalfOpen
이 true
로 설정되면 소켓의 다른 쪽 끝에서 전송 종료를 알릴 때 서버는 socket.end()
가 명시적으로 호출될 때만 전송 종료를 다시 보냅니다. 예를 들어 TCP 컨텍스트에서 FIN 패킷을 받으면 socket.end()
가 명시적으로 호출될 때만 FIN 패킷을 다시 보냅니다. 그때까지 연결은 반쯤 닫힌 상태(읽을 수 없지만 여전히 쓸 수 있음)입니다. 자세한 내용은 'end'
이벤트 및 RFC 1122 (섹션 4.2.2.13)을 참조하십시오.
pauseOnConnect
가 true
로 설정되면 각 들어오는 연결과 연결된 소켓이 일시 중지되고 해당 핸들에서 데이터가 읽히지 않습니다. 이렇게 하면 원래 프로세스에서 데이터를 읽지 않고 프로세스 간에 연결을 전달할 수 있습니다. 일시 중지된 소켓에서 데이터 읽기를 시작하려면 socket.resume()
을 호출합니다.
서버는 listen()
에 따라 TCP 서버 또는 IPC 서버가 될 수 있습니다.
다음은 포트 8124에서 연결을 수신하는 TCP 에코 서버의 예입니다.
import net from 'node:net'
const server = net.createServer(c => {
// 'connection' 리스너.
console.log('클라이언트 연결됨')
c.on('end', () => {
console.log('클라이언트 연결 끊김')
})
c.write('hello\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('서버 바인딩됨')
})
const net = require('node:net')
const server = net.createServer(c => {
// 'connection' 리스너.
console.log('클라이언트 연결됨')
c.on('end', () => {
console.log('클라이언트 연결 끊김')
})
c.write('hello\r\n')
c.pipe(c)
})
server.on('error', err => {
throw err
})
server.listen(8124, () => {
console.log('서버 바인딩됨')
})
telnet
을 사용하여 테스트합니다.
telnet localhost 8124
소켓 /tmp/echo.sock
에서 수신하려면 다음과 같이 합니다.
server.listen('/tmp/echo.sock', () => {
console.log('서버 바인딩됨')
})
nc
를 사용하여 Unix 도메인 소켓 서버에 연결합니다.
nc -U /tmp/echo.sock
net.getDefaultAutoSelectFamily()
추가된 버전: v19.4.0
socket.connect(options)
의 autoSelectFamily
옵션의 현재 기본값을 가져옵니다. 명령줄 옵션 --no-network-family-autoselection
이 제공되지 않는 한 초기 기본값은 true
입니다.
- 반환값: <boolean>
autoSelectFamily
옵션의 현재 기본값입니다.
net.setDefaultAutoSelectFamily(value)
추가된 버전: v19.4.0
socket.connect(options)
의 autoSelectFamily
옵션의 기본값을 설정합니다.
value
<boolean> 새로운 기본값입니다. 명령줄 옵션--no-network-family-autoselection
이 제공되지 않는 한 초기 기본값은true
입니다.
net.getDefaultAutoSelectFamilyAttemptTimeout()
추가된 버전: v19.8.0, v18.18.0
socket.connect(options)
의 autoSelectFamilyAttemptTimeout
옵션의 현재 기본값을 가져옵니다. 초기 기본값은 250
이거나 명령줄 옵션 --network-family-autoselection-attempt-timeout
을 통해 지정된 값입니다.
- 반환값: <number>
autoSelectFamilyAttemptTimeout
옵션의 현재 기본값입니다.
net.setDefaultAutoSelectFamilyAttemptTimeout(value)
추가된 버전: v19.8.0, v18.18.0
socket.connect(options)
의 autoSelectFamilyAttemptTimeout
옵션의 기본값을 설정합니다.
value
<number> 새로운 기본값이며, 양수여야 합니다. 숫자가10
보다 작으면 대신10
이 사용됩니다. 초기 기본값은250
이거나 명령줄 옵션--network-family-autoselection-attempt-timeout
을 통해 지정된 값입니다.
net.isIP(input)
추가된 버전: v0.3.0
input
이 IPv6 주소이면 6
을 반환합니다. input
이 선행 0이 없는 점십진 표기법의 IPv4 주소이면 4
를 반환합니다. 그렇지 않으면 0
을 반환합니다.
net.isIP('::1') // 6 반환
net.isIP('127.0.0.1') // 4 반환
net.isIP('127.000.000.001') // 0 반환
net.isIP('127.0.0.1/24') // 0 반환
net.isIP('fhqwhgads') // 0 반환
net.isIPv4(input)
추가된 버전: v0.3.0
input
이 선행 0이 없는 점십진 표기법의 IPv4 주소이면 true
를 반환합니다. 그렇지 않으면 false
를 반환합니다.
net.isIPv4('127.0.0.1') // true 반환
net.isIPv4('127.000.000.001') // false 반환
net.isIPv4('127.0.0.1/24') // false 반환
net.isIPv4('fhqwhgads') // false 반환
net.isIPv6(input)
추가된 버전: v0.3.0
input
이 IPv6 주소이면 true
를 반환합니다. 그렇지 않으면 false
를 반환합니다.
net.isIPv6('::1') // true 반환
net.isIPv6('fhqwhgads') // false 반환