[pve-devel] [PATCH common 2/2] tools: next_unused_port: use IPPROTO_TCP explicitly

Wolfgang Bumiller w.bumiller at proxmox.com
Tue May 30 15:30:10 CEST 2017


Otherwise perl tries to bind+listen on a UDP socket if the
TCP socket fails - which is a waste since we're looking for
TCP ports.
Additionall since UDP doesn't support listen(), perl will
return EOPNOTSUPP instead of, say, EADDRINUSE. (We don't
care about the error in this code though.)
---
 src/PVE/Tools.pm | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm
index 30322b2..da7da5d 100644
--- a/src/PVE/Tools.pm
+++ b/src/PVE/Tools.pm
@@ -4,7 +4,8 @@ use strict;
 use warnings;
 use POSIX qw(EINTR EEXIST EOPNOTSUPP);
 use IO::Socket::IP;
-use Socket qw(AF_INET AF_INET6 AI_ALL AI_V4MAPPED AI_CANONNAME SOCK_DGRAM);
+use Socket qw(AF_INET AF_INET6 AI_ALL AI_V4MAPPED AI_CANONNAME SOCK_DGRAM
+	      IPPROTO_TCP);
 use IO::Select;
 use File::Basename;
 use File::Path qw(make_path);
@@ -789,7 +790,7 @@ sub next_unused_port {
 	my %sockargs = (Listen => 5,
 			ReuseAddr => 1,
 			Family    => $family,
-			Proto     => 0,
+			Proto     => IPPROTO_TCP,
 			GetAddrInfoFlags => 0);
 	$sockargs{LocalAddr} = $address if defined($address);
 
-- 
2.11.0





More information about the pve-devel mailing list