diff --git a/include/proto/protocols.h b/include/proto/protocols.h index c5efd0cad..cd54ec8ee 100644 --- a/include/proto/protocols.h +++ b/include/proto/protocols.h @@ -58,6 +58,12 @@ int disable_all_listeners(struct protocol *proto); */ int unbind_listener(struct listener *listener); +/* This function closes all listening sockets bound to the protocol , + * and the listeners end in LI_ASSIGNED state if they were higher. It does not + * detach them from the protocol. It always returns ERR_NONE. + */ +int unbind_all_listeners(struct protocol *proto); + /* Delete a listener from its protocol's list of listeners. The listener's * state is automatically updated from LI_ASSIGNED to LI_INIT. The protocol's * number of listeners is updated. Note that the listener must have previously diff --git a/src/protocols.c b/src/protocols.c index 294edefa7..70d04de4c 100644 --- a/src/protocols.c +++ b/src/protocols.c @@ -100,6 +100,19 @@ int unbind_listener(struct listener *listener) return ERR_NONE; } +/* This function closes all listening sockets bound to the protocol , + * and the listeners end in LI_ASSIGNED state if they were higher. It does not + * detach them from the protocol. It always returns ERR_NONE. + */ +int unbind_all_listeners(struct protocol *proto) +{ + struct listener *listener; + + list_for_each_entry(listener, &proto->listeners, proto_list) + unbind_listener(listener); + return ERR_NONE; +} + /* Delete a listener from its protocol's list of listeners. The listener's * state is automatically updated from LI_ASSIGNED to LI_INIT. The protocol's * number of listeners is updated. Note that the listener must have previously