struct GNUNET_NETWORK_Handle *socket;
struct addrinfo hint;
struct addrinfo *ret;
+ struct addrinfo *ai;
uint32_t *port_buckets;
char *open_port_str;
int bind_status;
GNUNET_asprintf (&open_port_str, "%u", (unsigned int) open_port);
ret = NULL;
GNUNET_assert (0 == getaddrinfo (NULL, open_port_str, &hint, &ret));
- GNUNET_free (open_port_str);
- socket = GNUNET_NETWORK_socket_create (ret->ai_family,
- (GNUNET_YES == is_tcp) ?
- SOCK_STREAM : SOCK_DGRAM,
- 0);
- GNUNET_assert (NULL != socket);
- bind_status = GNUNET_NETWORK_socket_bind (socket,
- ret->ai_addr,
- ret->ai_addrlen);
- freeaddrinfo (ret);
- GNUNET_NETWORK_socket_close (socket);
- socket = NULL;
+ GNUNET_free (open_port_str);
+ bind_status = GNUNET_NO;
+ for (ai = ret; NULL != ai; ai = ai->ai_next)
+ {
+ socket = GNUNET_NETWORK_socket_create (ai->ai_family,
+ (GNUNET_YES == is_tcp) ?
+ SOCK_STREAM : SOCK_DGRAM,
+ 0);
+ if (NULL == socket)
+ continue;
+ bind_status = GNUNET_NETWORK_socket_bind (socket,
+ ai->ai_addr,
+ ai->ai_addrlen);
+ GNUNET_NETWORK_socket_close (socket);
+ if (GNUNET_OK != bind_status)
+ break;
+ }
port_buckets[index] |= (1U << pos); /* Set the port bit */
+ freeaddrinfo (ret);
if (GNUNET_OK == bind_status)
{
LOG (GNUNET_ERROR_TYPE_DEBUG,
}
peer = GNUNET_malloc (sizeof (struct GNUNET_TESTING_Peer));
peer->cfgfile = config_filename; /* Free in peer_destroy */
- peer->main_binary = GNUNET_strdup ("gnunet-service-arm");
+ peer->main_binary = GNUNET_OS_get_libexec_binary_path ("gnunet-service-arm");
peer->system = system;
peer->key_number = key_number;
return peer;
struct GNUNET_TESTING_System *system;
struct GNUNET_TESTING_Peer *peer;
struct GNUNET_CONFIGURATION_Handle *cfg;
+ char *binary;
GNUNET_log_setup (testdir, "WARNING", NULL);
system = GNUNET_TESTING_system_create (testdir, "127.0.0.1", NULL);
return 1;
}
GNUNET_free (peer->main_binary);
- GNUNET_asprintf (&peer->main_binary, "gnunet-service-%s", service_name);
+ GNUNET_asprintf (&binary, "gnunet-service-%s", service_name);
+ peer->main_binary = GNUNET_OS_get_libexec_binary_path (binary);
+ GNUNET_free (binary);
if (GNUNET_OK != GNUNET_TESTING_peer_start (peer))
{
GNUNET_TESTING_peer_destroy (peer);