summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2015-02-14 09:56:11 +0800
committerMatt Johnston <matt@ucc.asn.au>2015-02-14 09:56:11 +0800
commit21f2af66311b1488fb1539c28eb8cd32fd74cd65 (patch)
tree04205885770a911989f45fa031271fd985a8793a
parentec6ccd02c663e7b31f3d3ae17c0c6bcd23c66fac (diff)
downloaddropbear-21f2af66311b1488fb1539c28eb8cd32fd74cd65.tar.gz
connect_remote() is now always non-blocking
-rw-r--r--cli-main.c3
-rw-r--r--cli-tcpfwd.c2
-rw-r--r--dbutil.c13
-rw-r--r--dbutil.h3
-rw-r--r--svr-tcpfwd.c2
5 files changed, 9 insertions, 14 deletions
diff --git a/cli-main.c b/cli-main.c
index 20f19a4..a956721 100644
--- a/cli-main.c
+++ b/cli-main.c
@@ -72,8 +72,7 @@ int main(int argc, char ** argv) {
} else
#endif
{
- int sock = connect_remote(cli_opts.remotehost, cli_opts.remoteport,
- 1, &error);
+ int sock = connect_remote(cli_opts.remotehost, cli_opts.remoteport, &error);
sock_in = sock_out = sock;
}
diff --git a/cli-tcpfwd.c b/cli-tcpfwd.c
index fa61d13..3894044 100644
--- a/cli-tcpfwd.c
+++ b/cli-tcpfwd.c
@@ -254,7 +254,7 @@ static int newtcpforwarded(struct Channel * channel) {
}
snprintf(portstring, sizeof(portstring), "%d", fwd->connectport);
- sock = connect_remote(fwd->connectaddr, portstring, 1, NULL);
+ sock = connect_remote(fwd->connectaddr, portstring, NULL);
if (sock < 0) {
TRACE(("leave newtcpdirect: sock failed"))
err = SSH_OPEN_CONNECT_FAILED;
diff --git a/dbutil.c b/dbutil.c
index 923327b..ec108bf 100644
--- a/dbutil.c
+++ b/dbutil.c
@@ -435,8 +435,7 @@ static void set_piggyback_ack(int sock) {
* wasn't null, it will be a newly malloced error message */
/* TODO: maxfd */
-int connect_remote(const char* remotehost, const char* remoteport,
- int nonblocking, char ** errstring) {
+int connect_remote(const char* remotehost, const char* remoteport, char ** errstring) {
struct addrinfo *res0 = NULL, *res = NULL, hints;
int sock;
@@ -475,16 +474,14 @@ int connect_remote(const char* remotehost, const char* remoteport,
continue;
}
- if (nonblocking) {
- setnonblocking(sock);
+ setnonblocking(sock);
#if defined(__linux__) && defined(TCP_DEFER_ACCEPT)
- set_piggyback_ack(sock);
+ set_piggyback_ack(sock);
#endif
- }
if (connect(sock, res->ai_addr, res->ai_addrlen) < 0) {
- if (errno == EINPROGRESS && nonblocking) {
+ if (errno == EINPROGRESS) {
TRACE(("Connect in progress"))
break;
} else {
@@ -498,7 +495,7 @@ int connect_remote(const char* remotehost, const char* remoteport,
break; /* Success */
}
- if (sock < 0 && !(errno == EINPROGRESS && nonblocking)) {
+ if (sock < 0 && !(errno == EINPROGRESS)) {
/* Failed */
if (errstring != NULL && *errstring == NULL) {
int len;
diff --git a/dbutil.h b/dbutil.h
index a13c15f..9feec2d 100644
--- a/dbutil.h
+++ b/dbutil.h
@@ -83,8 +83,7 @@ void run_shell_command(const char* cmd, unsigned int maxfd, char* usershell);
#ifdef ENABLE_CONNECT_UNIX
int connect_unix(const char* addr);
#endif
-int connect_remote(const char* remotehost, const char* remoteport,
- int nonblocking, char ** errstring);
+int connect_remote(const char* remotehost, const char* remoteport, char ** errstring);
int buf_readfile(buffer* buf, const char* filename);
int buf_getline(buffer * line, FILE * authfile);
diff --git a/svr-tcpfwd.c b/svr-tcpfwd.c
index e5f219e..f2c4b93 100644
--- a/svr-tcpfwd.c
+++ b/svr-tcpfwd.c
@@ -270,7 +270,7 @@ static int newtcpdirect(struct Channel * channel) {
}
snprintf(portstring, sizeof(portstring), "%d", destport);
- sock = connect_remote(desthost, portstring, 1, NULL);
+ sock = connect_remote(desthost, portstring, NULL);
if (sock < 0) {
err = SSH_OPEN_CONNECT_FAILED;
TRACE(("leave newtcpdirect: sock failed"))