summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-13 05:20:19 +0000
committerRobert James Kaes <rjkaes@users.sourceforge.net>2002-04-13 05:20:19 +0000
commitbe47c1791d545d5ef39d56a7980b1ba729c0ad4f (patch)
treedd7a7a50ada021046a1be64f7050e2da1a336de5 /src
parent1685e9ca66f6ed06adeb80e2319fe5190da35c70 (diff)
downloadtinyproxy-be47c1791d545d5ef39d56a7980b1ba729c0ad4f.tar.gz
tinyproxy-be47c1791d545d5ef39d56a7980b1ba729c0ad4f.zip
Modified the opensock() function to respect the Listen directive. If it's
set, bind all outgoing addresses to this local address.
Diffstat (limited to 'src')
-rw-r--r--src/sock.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/sock.c b/src/sock.c
index 181ac3d..7f76336 100644
--- a/src/sock.c
+++ b/src/sock.c
@@ -1,4 +1,4 @@
-/* $Id: sock.c,v 1.23 2001-12-24 00:01:32 rjkaes Exp $
+/* $Id: sock.c,v 1.24 2002-04-13 05:20:19 rjkaes Exp $
*
* Sockets are created and destroyed here. When a new connection comes in from
* a client, we need to copy the socket and the create a second socket to the
@@ -97,6 +97,7 @@ opensock(char *ip_addr, uint16_t port)
{
int sock_fd;
struct sockaddr_in port_info;
+ struct sockaddr_in bind_addr;
int ret;
assert(ip_addr != NULL);
@@ -124,6 +125,21 @@ opensock(char *ip_addr, uint16_t port)
return -1;
}
+ /* Bind to our listening address*/
+ if (config.ipAddr) {
+ memset(&bind_addr, 0, sizeof(bind_addr));
+ bind_addr.sin_family = AF_INET;
+ bind_addr.sin_addr.s_addr = inet_addr(config.ipAddr);
+
+ ret = bind(sock_fd, (struct sockaddr *)&bind_addr, sizeof(bind_addr));
+ if (ret < 0) {
+ log_message(LOG_ERR, "Could not bind local address \"%\" because of %s",
+ config.ipAddr,
+ strerror(errno));
+ return -1;
+ }
+ }
+
if (connect(sock_fd, (struct sockaddr *) &port_info, sizeof(port_info)) < 0) {
log_message(LOG_ERR, "opensock: connect() error \"%s\".",
strerror(errno));