MINOR: protocols: always pass a "port" argument to the listener creation

It's a shame that cfgparse() has to make special cases of each protocol
just to cast the port to the target address family. Let's pass the port
in argument to the function. The unix listener simply ignores it.
diff --git a/include/proto/proto_tcp.h b/include/proto/proto_tcp.h
index 13d7a78..94a8415 100644
--- a/include/proto/proto_tcp.h
+++ b/include/proto/proto_tcp.h
@@ -28,8 +28,8 @@
 #include <proto/stick_table.h>
 
 int tcp_bind_socket(int fd, int flags, struct sockaddr_storage *local, struct sockaddr_storage *remote);
-void tcpv4_add_listener(struct listener *listener);
-void tcpv6_add_listener(struct listener *listener);
+void tcpv4_add_listener(struct listener *listener, int port);
+void tcpv6_add_listener(struct listener *listener, int port);
 int tcp_pause_listener(struct listener *l);
 int tcp_connect_server(struct connection *conn, int data, int delack);
 int tcp_connect_probe(struct connection *conn);
diff --git a/include/proto/proto_uxst.h b/include/proto/proto_uxst.h
index d7bcaa6..63de24f 100644
--- a/include/proto/proto_uxst.h
+++ b/include/proto/proto_uxst.h
@@ -26,7 +26,7 @@
 #include <types/stream.h>
 #include <types/task.h>
 
-void uxst_add_listener(struct listener *listener);
+void uxst_add_listener(struct listener *listener, int port);
 int uxst_pause_listener(struct listener *l);
 int uxst_get_src(int fd, struct sockaddr *sa, socklen_t salen, int dir);
 int uxst_get_dst(int fd, struct sockaddr *sa, socklen_t salen, int dir);
diff --git a/src/cfgparse.c b/src/cfgparse.c
index fc346b9..9752b81 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -299,15 +299,13 @@
 			l->state = LI_INIT;
 
 			if (ss.ss_family == AF_INET) {
-				((struct sockaddr_in *)(&l->addr))->sin_port = htons(port);
-				tcpv4_add_listener(l);
+				tcpv4_add_listener(l, port);
 			}
 			else if (ss.ss_family == AF_INET6) {
-				((struct sockaddr_in6 *)(&l->addr))->sin6_port = htons(port);
-				tcpv6_add_listener(l);
+				tcpv6_add_listener(l, port);
 			}
 			else {
-				uxst_add_listener(l);
+				uxst_add_listener(l, port);
 			}
 
 			jobs++;
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index 2bbde7a..6b1505a 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -1137,30 +1137,32 @@
 	return err;
 }
 
-/* Add listener to the list of tcpv4 listeners. The listener's state
- * is automatically updated from LI_INIT to LI_ASSIGNED. The number of
- * listeners is updated. This is the function to use to add a new listener.
+/* Add <listener> to the list of tcpv4 listeners, on port <port>. The
+ * listener's state is automatically updated from LI_INIT to LI_ASSIGNED.
+ * The number of listeners for the protocol is updated.
  */
-void tcpv4_add_listener(struct listener *listener)
+void tcpv4_add_listener(struct listener *listener, int port)
 {
 	if (listener->state != LI_INIT)
 		return;
 	listener->state = LI_ASSIGNED;
 	listener->proto = &proto_tcpv4;
+	((struct sockaddr_in *)(&listener->addr))->sin_port = htons(port);
 	LIST_ADDQ(&proto_tcpv4.listeners, &listener->proto_list);
 	proto_tcpv4.nb_listeners++;
 }
 
-/* Add listener to the list of tcpv4 listeners. The listener's state
- * is automatically updated from LI_INIT to LI_ASSIGNED. The number of
- * listeners is updated. This is the function to use to add a new listener.
+/* Add <listener> to the list of tcpv6 listeners, on port <port>. The
+ * listener's state is automatically updated from LI_INIT to LI_ASSIGNED.
+ * The number of listeners for the protocol is updated.
  */
-void tcpv6_add_listener(struct listener *listener)
+void tcpv6_add_listener(struct listener *listener, int port)
 {
 	if (listener->state != LI_INIT)
 		return;
 	listener->state = LI_ASSIGNED;
 	listener->proto = &proto_tcpv6;
+	((struct sockaddr_in *)(&listener->addr))->sin_port = htons(port);
 	LIST_ADDQ(&proto_tcpv6.listeners, &listener->proto_list);
 	proto_tcpv6.nb_listeners++;
 }
diff --git a/src/proto_uxst.c b/src/proto_uxst.c
index ac14d3b..767cd16 100644
--- a/src/proto_uxst.c
+++ b/src/proto_uxst.c
@@ -365,11 +365,11 @@
 	return ERR_NONE;
 }
 
-/* Add a listener to the list of unix stream listeners. The listener's state
- * is automatically updated from LI_INIT to LI_ASSIGNED. The number of
- * listeners is updated. This is the function to use to add a new listener.
+/* Add <listener> to the list of unix stream listeners (port is ignored). The
+ * listener's state is automatically updated from LI_INIT to LI_ASSIGNED.
+ * The number of listeners for the protocol is updated.
  */
-void uxst_add_listener(struct listener *listener)
+void uxst_add_listener(struct listener *listener, int port)
 {
 	if (listener->state != LI_INIT)
 		return;