mirror of
https://github.com/rofl0r/proxychains-ng
synced 2026-05-13 17:03:07 +08:00
Compare commits
1 Commits
+12
-5
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user