+static int
+bind_random(int sock)
+{
+ int i, status;
+ uint16_t src_port;
+ struct sockaddr_in local;
+
+ src_port = 0;
+ status = -1;
+
+ for (i = 0; (i < RANDOM_BIND_MAX_TRIES) && (status < 0); i++)
+ {
+ /* random port in the range RANDOM_BIND_FIRST to RANDOM_BIND_LAST */
+ src_port = (res_randomid() % (RANDOM_BIND_LAST - RANDOM_BIND_FIRST)) + RANDOM_BIND_FIRST;
+ memset(&local, 0, sizeof(struct sockaddr_in));
+ local.sin_port = htons(src_port);
+
+ status = bind(sock, (struct sockaddr *)&local, sizeof(struct sockaddr_in));
+ }
+
+ return status;
+}
+