1
0
mirror of https://github.com/rofl0r/proxychains-ng synced 2026-05-13 17:03:07 +08:00

Compare commits

..

1 Commits

+12 -5
View File
@@ -154,10 +154,19 @@ static int timed_connect(int sock, const struct sockaddr *addr, socklen_t len) {
pfd[0].fd = sock;
pfd[0].events = POLLOUT;
fcntl(sock, F_SETFL, O_NONBLOCK);
int flags = fcntl(sock, F_GETFL, 0);
/* put socket temporarily into nonblocking mode so we can enforce
* the timeout. */
if(!(flags & O_NONBLOCK))
fcntl(sock, F_SETFL, flags | O_NONBLOCK);
ret = true_connect(sock, addr, len);
PDEBUG("\nconnect ret=%d\n", ret);
/* if the socket was already non-blocking, we assume the app takes
* care of handling the timeouts itself. */
if(flags & O_NONBLOCK)
return ret;
if(ret == -1 && errno == EINPROGRESS) {
ret = poll_retry(pfd, 1, tcp_connect_time_out);
PDEBUG("\npoll ret=%d\n", ret);
@@ -181,7 +190,7 @@ static int timed_connect(int sock, const struct sockaddr *addr, socklen_t len) {
ret = -1;
}
fcntl(sock, F_SETFL, !O_NONBLOCK);
fcntl(sock, F_SETFL, flags);
return ret;
}
@@ -700,10 +709,8 @@ int connect_proxy_chain(int sock, ip_type target_ip,
}
proxychains_write_log(TP " OK\n");
int flags = fcntl(sock, F_GETFL, 0);
dup2(ns, sock);
close(ns);
fcntl(sock, F_SETFL, flags);
return 0;
error:
if(ns != -1)