( self, address, port, addressType, localAddress, localPort, flags)
| 1249 | |
| 1250 | |
| 1251 | function internalConnect( |
| 1252 | self, address, port, addressType, localAddress, localPort, flags) { |
| 1253 | // TODO return promise from Socket.prototype.connect which |
| 1254 | // wraps _connectReq. |
| 1255 | |
| 1256 | assert(self.connecting); |
| 1257 | |
| 1258 | let err; |
| 1259 | |
| 1260 | if (localAddress || localPort) { |
| 1261 | if (addressType === 4) { |
| 1262 | localAddress ||= DEFAULT_IPV4_ADDR; |
| 1263 | err = self._handle.bind(localAddress, localPort); |
| 1264 | } else { // addressType === 6 |
| 1265 | localAddress ||= DEFAULT_IPV6_ADDR; |
| 1266 | err = self._handle.bind6(localAddress, localPort, flags); |
| 1267 | } |
| 1268 | debug('connect: binding to localAddress: %s and localPort: %d (addressType: %d)', |
| 1269 | localAddress, localPort, addressType); |
| 1270 | |
| 1271 | err = checkBindError(err, localPort, self._handle); |
| 1272 | if (err) { |
| 1273 | const ex = new ExceptionWithHostPort(err, 'bind', localAddress, localPort); |
| 1274 | self.destroy(ex); |
| 1275 | return; |
| 1276 | } |
| 1277 | } |
| 1278 | |
| 1279 | debug('connect: attempting to connect to %s:%d (addressType: %d)', address, port, addressType); |
| 1280 | self.emit('connectionAttempt', address, port, addressType); |
| 1281 | |
| 1282 | if (addressType === 6 || addressType === 4) { |
| 1283 | if (self.blockList?.check(address, `ipv${addressType}`)) { |
| 1284 | self.destroy(new ERR_IP_BLOCKED(address)); |
| 1285 | return; |
| 1286 | } |
| 1287 | const req = new TCPConnectWrap(); |
| 1288 | req.oncomplete = afterConnect; |
| 1289 | req.address = address; |
| 1290 | req.port = port; |
| 1291 | req.localAddress = localAddress; |
| 1292 | req.localPort = localPort; |
| 1293 | req.addressType = addressType; |
| 1294 | |
| 1295 | if (addressType === 4) |
| 1296 | err = self._handle.connect(req, address, port); |
| 1297 | else |
| 1298 | err = self._handle.connect6(req, address, port); |
| 1299 | } else { |
| 1300 | const req = new PipeConnectWrap(); |
| 1301 | req.address = address; |
| 1302 | req.oncomplete = afterConnect; |
| 1303 | |
| 1304 | err = self._handle.connect(req, address); |
| 1305 | } |
| 1306 | |
| 1307 | if (err) { |
| 1308 | const sockname = self._getsockname(); |
nothing calls this directly
no test coverage detected
searching dependent graphs…