MT#55283 split out socket open logic

Change-Id: I7fc0784fec800008c91a87e227f5f69d182a9e1e
pull/1918/head
Richard Fuchs 10 months ago
parent 1f8516cfe4
commit de8bc15ea7

@ -1176,6 +1176,23 @@ static struct socket_port_link get_any_port_link(struct intf_spec *spec) {
return ret;
}
static bool open_port_link_sockets(socket_port_q *out, struct intf_spec *spec, const str *label) {
for (__auto_type l = out->head; l; l = l->next) {
__auto_type spl = l->data;
unsigned int port = GPOINTER_TO_UINT(spl->links.head->data);
ilog(LOG_DEBUG, "Trying to bind the socket for port = '%d'", port);
/* if not possible to engage this socket, try to reallocate it again */
if (!add_socket(&spl->socket, port, spec, label)) {
/* if something has been left in the `ports_to_engage` queue, release it right away */
release_reserved_ports(out);
/* ports which are already bound to a socket, will be freed by `free_port()` */
return false;
}
}
return true;
}
/**
* Puts a list of `socket_t` objects into the `out`.
*
@ -1317,25 +1334,9 @@ new_cycle:
allocation_attempts);
/* at this point we consider all things before as successful */
if (open_port_link_sockets(out, spec, label))
break; // success
for (__auto_type l = out->head; l; l = l->next) {
__auto_type spl = l->data;
port = GPOINTER_TO_UINT(spl->links.head->data);
ilog(LOG_DEBUG, "Trying to bind the socket for port = '%d'", port);
/* if not possible to engage this socket, try to reallocate it again */
if (!add_socket(&spl->socket, port, spec, label)) {
/* if something has been left in the `ports_to_engage` queue, release it right away */
release_reserved_ports(out);
/* ports which are already bound to a socket, will be freed by `free_port()` */
goto release_restart;
}
}
/* success */
break;
release_restart:
/* do not re-try for specifically wanted ports */
if (wanted_start_port > 0)
goto fail;

Loading…
Cancel
Save