aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libssh/priv.h6
-rw-r--r--src/bind.c18
2 files changed, 11 insertions, 13 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index e8b50ba0..0c5129c5 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -109,11 +109,15 @@
struct timeval;
int gettimeofday(struct timeval *__p, void *__t);
+#define _XCLOSESOCKET closesocket
+
#else /* _WIN32 */
#include <unistd.h>
#define PRIdS "zd"
+#define _XCLOSESOCKET close
+
#endif /* _WIN32 */
#include "libssh/libssh.h"
@@ -332,5 +336,7 @@ int match_hostname(const char *host, const char *pattern, unsigned int len);
#define __VA_NARG__(...) (-1)
#endif
+#define CLOSE_SOCKET(s) do { if ((s) != SSH_INVALID_SOCKET) { _XCLOSESOCKET(s); (s) = SSH_INVALID_SOCKET;} } while(0)
+
#endif /* _LIBSSH_PRIV_H */
/* vim: set ts=4 sw=4 et cindent: */
diff --git a/src/bind.c b/src/bind.c
index be348651..6b0fb238 100644
--- a/src/bind.c
+++ b/src/bind.c
@@ -109,7 +109,7 @@ static socket_t bind_socket(ssh_bind sshbind, const char *hostname,
"Setting socket options failed: %s",
strerror(errno));
freeaddrinfo (ai);
- close(s);
+ CLOSE_SOCKET(s);
return -1;
}
@@ -121,7 +121,7 @@ static socket_t bind_socket(ssh_bind sshbind, const char *hostname,
port,
strerror(errno));
freeaddrinfo (ai);
- close(s);
+ CLOSE_SOCKET(s);
return -1;
}
@@ -259,7 +259,7 @@ int ssh_bind_listen(ssh_bind sshbind) {
ssh_set_error(sshbind, SSH_FATAL,
"Listening to socket %d: %s",
fd, strerror(errno));
- close(fd);
+ CLOSE_SOCKET(fd);
ssh_key_free(sshbind->dsa);
sshbind->dsa = NULL;
ssh_key_free(sshbind->rsa);
@@ -350,11 +350,7 @@ void ssh_bind_free(ssh_bind sshbind){
}
if (sshbind->bindfd >= 0) {
-#ifdef _WIN32
- closesocket(sshbind->bindfd);
-#else
- close(sshbind->bindfd);
-#endif
+ CLOSE_SOCKET(sshbind->bindfd);
}
sshbind->bindfd = SSH_INVALID_SOCKET;
@@ -499,11 +495,7 @@ int ssh_bind_accept(ssh_bind sshbind, ssh_session session) {
rc = ssh_bind_accept_fd(sshbind, session, fd);
if(rc == SSH_ERROR){
-#ifdef _WIN32
- closesocket(fd);
-#else
- close(fd);
-#endif
+ CLOSE_SOCKET(fd);
ssh_socket_free(session->socket);
}
return rc;