| 
					
				 | 
			
			
				@@ -194,6 +194,9 @@ static int is_port_available(int *port, int is_tcp) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 typedef struct portreq { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_pollset pollset; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int port; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  int retries; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  char *server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  grpc_httpcli_context *ctx; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } portreq; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void got_port_from_server(void *arg, 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -201,6 +204,19 @@ static void got_port_from_server(void *arg, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   size_t i; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   int port = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   portreq *pr = arg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  if (!response || response->status != 200) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_httpcli_request req; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    memset(&req, 0, sizeof(req)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    GPR_ASSERT(pr->retries < 10); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    pr->retries++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    req.host = pr->server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    req.path = "/get"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    gpr_log(GPR_DEBUG, "failed port pick from server: retrying"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    sleep(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    grpc_httpcli_get(pr->ctx, &pr->pollset, &req, GRPC_TIMEOUT_SECONDS_TO_DEADLINE(10),  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                     got_port_from_server, pr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   GPR_ASSERT(response->status == 200); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   for (i = 0; i < response->body_length; i++) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -225,6 +241,8 @@ static int pick_port_using_server(char *server) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   memset(&req, 0, sizeof(req)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   grpc_pollset_init(&pr.pollset); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   pr.port = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pr.server = server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  pr.ctx = &context; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   req.host = server; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   req.path = "/get"; 
			 |