#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);
#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);
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++;
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++;
}
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;