- ret = sock->ops->bind(sock);
- if (ret < 0) {
- WARN("Another session daemon is using this agent port. Agent support "
- "will be deactivated to prevent interfering with the tracing.");
- goto error;
+ for (port = config.agent_tcp_port.begin;
+ port <= config.agent_tcp_port.end; port++) {
+ ret = lttcomm_sock_set_port(sock, (uint16_t) port);
+ if (ret) {
+ ERR("[agent-thread] Failed to set port %u on socket",
+ port);
+ goto error;
+ }
+ DBG3("[agent-thread] Trying to bind on port %u", port);
+ ret = sock->ops->bind(sock);
+ if (!ret) {
+ bind_succeeded = true;
+ break;
+ }
+
+ if (errno == EADDRINUSE) {
+ DBG("Failed to bind to port %u since it is already in use",
+ port);
+ } else {
+ PERROR("Failed to bind to port %u", port);
+ goto error;
+ }
+ }
+
+ if (!bind_succeeded) {
+ if (config.agent_tcp_port.begin == config.agent_tcp_port.end) {
+ WARN("Another process is already using the agent port %i. "
+ "Agent support will be deactivated.",
+ config.agent_tcp_port.begin);
+ goto error;
+ } else {
+ WARN("All ports in the range [%i, %i] are already in use. "
+ "Agent support will be deactivated.",
+ config.agent_tcp_port.begin,
+ config.agent_tcp_port.end);
+ goto error;
+ }