diff --git a/CHANGES b/CHANGES
index b9ee5d5..274b8e6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -14,6 +14,10 @@ Corrections:
 	corrected test IGNOREEOF.
 	Thanks to Rusty Bird for the precise problem report.
 
+	Fixed the regression introduced with version 1.8.0.1 that in socks5
+	addresses the explicit socksport (2nd address parameter) was ignored.
+	Thanks to Jakub FiĊĦer for reporting this bug.
+
 Building:
 	Disabling certain features during configure could break build process.
 
diff --git a/doc/socat.yo b/doc/socat.yo
index abfd991..2574a3f 100644
--- a/doc/socat.yo
+++ b/doc/socat.yo
@@ -1103,6 +1103,7 @@ label(ADDRESS_SOCKS4A)dit(bf(tt(SOCKS4A:<socks-server>:<host>:<port>)))
    Option groups: link(FD)(GROUP_FD),link(SOCKET)(GROUP_SOCKET),link(IP4)(GROUP_IP4),link(IP6)(GROUP_IP6),link(TCP)(GROUP_TCP),link(SOCKS4)(GROUP_SOCKS),link(RETRY)(GROUP_RETRY) nl()
 
 label(ADDRESS_SOCKS5_CONNECT)dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<socks-port>:<target-host>:<target-port>)))
+dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<target-host>:<target-port>)))
    Connects via <socks-server> [link(IP address)(TYPE_IP_ADDRESS)]
    to <target-host> [link(IPv4 address)(TYPE_IPV4_ADDRESS)]
    on <target-port> [link(TCP service)(TYPE_TCP_SERVICE)],
@@ -1122,6 +1123,7 @@ label(ADDRESS_SOCKS5_CONNECT)dit(bf(tt(SOCKS5-CONNECT:<socks-server>:<socks-port
    link(TCP)(ADDRESS_TCP_CONNECT)
 
 label(ADDRESS_SOCKS5_LISTEN)dit(bf(tt(SOCKS5-LISTEN:<socks-server>:<socks-port>:<listen-host>:<listen-port>)))
+dit(bf(tt(SOCKS5-LISTEN:<socks-server>:<listen-host>:<listen-port>)))
    Connects to <socks-server> [link(IP address)(TYPE_IP_ADDRESS)]
    using socks version 5 protocol over TCP
    and makes it listen for incoming connections on <listen-port> [link(TCP service)(TYPE_TCP_SERVICE)], binding to <-listen-host> [link(IPv4 address)(TYPE_IPV4_ADDRESS)]
diff --git a/xio-socks.c b/xio-socks.c
index 2e9c224..089fd27 100644
--- a/xio-socks.c
+++ b/xio-socks.c
@@ -239,7 +239,8 @@ int _xioopen_opt_socksport(
 {
    struct servent *se;
 
-   if (retropt_string(opts, OPT_SOCKSPORT, socksport) < 0) {
+   if (retropt_string(opts, OPT_SOCKSPORT, socksport) < 0 &&
+       *socksport == NULL) {
       if ((se = getservbyname("socks", "tcp")) != NULL) {
 	 Debug1("\"socks/tcp\" resolves to %u", ntohs(se->s_port));
 	 if ((*socksport = Malloc(6)) == NULL) {
diff --git a/xio-socks5.c b/xio-socks5.c
index 8543881..8d8ffc5 100644
--- a/xio-socks5.c
+++ b/xio-socks5.c
@@ -533,6 +533,7 @@ static int xioopen_socks5(
 		target_name = argv[3];
 		target_port = argv[4];
 	} else {
+		socks_port = NULL;
 		target_name = argv[2];
 		target_port = argv[3];
 	}
@@ -548,6 +549,7 @@ static int xioopen_socks5(
 	if (_xioopen_opt_socksport(opts, (char **)&socks_port) < 0) {
 		return STAT_NORETRY;
 	}
+	/*! possible memory leak */
 
 	result = _xioopen_ipapp_prepare(opts, &opts0, socks_server, socks_port,
 					&pf, ipproto,