Commit Diff


commit - e0e26735232e1d664b3ccb49856f754d05015d0c
commit + 20d2d786a08eff2fabb7addf495c55753db0614f
blob - fe9fdd24ee551c9f088d78a9f8353545bab5ba39
blob + 2c742f36201aae6a61f3cf3937a503cee37d3a28
--- gemini.c
+++ gemini.c
@@ -161,14 +161,15 @@ try_to_connect(int fd, short ev, void *d)
 	}
 
 	req->fd = socket(req->p->ai_family, req->p->ai_socktype, req->p->ai_protocol);
-	if (req->fd == -1)
+	if (req->fd == -1) {
 		req->p = req->p->ai_next;
-	else {
+		try_to_connect(fd, ev, req);
+	} else {
 		mark_nonblock(req->fd);
 		if (connect(req->fd, req->p->ai_addr, req->p->ai_addrlen) == 0)
 			goto done;
+		yield_w(req, try_to_connect, NULL);
 	}
-	try_to_connect(fd, ev, req);
 	return;
 
 err: