İşletim sistemi bağlantı noktası numarasını atar. Bkz. https://github.com/joyent/node/blob/v0.6.11/lib/net.js#L780-783
OS X'de, atama sırayla, kullanıcı arabirimidir ve kullanılmadığını doğrulamak için bağlantı noktasını denetlemez.
Ubuntu 11.04 üzerinde, atama rasgele, kullanıcı arabirimi ve ayrıca bağlantı noktası kullanımda olup olmadığını denetlemez.
Aşağıdaki kod, diğer platformlarda test etmek için kullanılabilir. Bağlantı noktalarının userland olduğunu doğrulamak için, betik bash ile 10,000 kez grep -c "bağlantı noktası: [0-9] {1,3}" ile sıfır eşleşmelerde koştum.
var net = require('net'),
firstPort;
(function createServer(port) {
var server = net.createServer();
server.listen(port, function() {
address = server.address();
if (port === 0) {
if (firstPort === undefined) {
firstPort = address.port;
// cause a EADDRINUSE in 10 more sockets for sequential platforms
// without this, will run out of fd's before hitting EADDRINUSE
createServer(firstPort + 10);
console.log('addr in use port trap: ', firstPort + 10);
} else {
// on OS X (sequential) this will increment the OS's sequential counter
// and not cause EADDRINUSE
createServer(address.port + 1);
}
createServer(0);
}
console.log("requested port:", port, " binded port:",address.port);
});
})(0);
Sadece rastgele bir bağlantı noktası atar ancak% 100 değilim. Ben hata ve artış vb yapmak gerekir ... bağlantı gibi (onlar aynı port ile tekrar denemek) – bryanmac
yapmalısınız Ama sonra sen-ebilmek var olmak zorunda değilsiniz rasgele kullanılabilir bağlantı noktasında başlamak için ne anlama geldiğini merak ediyorum Bir çeşit hizmet keşfi, başkaları ve müşterinin rastgele bulduğunuz şeyi keşfetmesi zor. :) – bryanmac
Bu, genellikle bir bağlantı noktasında anlaştığınız veya iyi bilinen bir bağlantı noktası kullandığınız için sorun değildir. Söz konusu bağlantı noktasını bağlama izniniz yoksa, çözmek için başka sorunlarınız var demektir. –