Skip to content

Commit 62f0b99

Browse files
authored
Merge pull request #7 from DanCInOz/master
Added argument for the bind address to use.
2 parents 9428ee9 + 62aa6c9 commit 62f0b99

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

proxy.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ void plog(int priority, const char *format, ...);
8080

8181
int server_sock, client_sock, remote_sock, remote_port = 0;
8282
int connections_processed = 0;
83-
char *remote_host, *cmd_in, *cmd_out;
83+
char *bind_addr, *remote_host, *cmd_in, *cmd_out;
8484
bool foreground = FALSE;
8585
bool use_syslog = FALSE;
8686

@@ -89,10 +89,12 @@ int main(int argc, char *argv[]) {
8989
int local_port;
9090
pid_t pid;
9191

92+
bind_addr = NULL;
93+
9294
local_port = parse_options(argc, argv);
9395

9496
if (local_port < 0) {
95-
printf("Syntax: %s -l local_port -h remote_host -p remote_port [-i \"input parser\"] [-o \"output parser\"] [-f (stay in foreground)] [-s (use syslog)]\n", argv[0]);
97+
printf("Syntax: %s [-b bind_address] -l local_port -h remote_host -p remote_port [-i \"input parser\"] [-o \"output parser\"] [-f (stay in foreground)] [-s (use syslog)]\n", argv[0]);
9698
return local_port;
9799
}
98100

@@ -132,11 +134,14 @@ int main(int argc, char *argv[]) {
132134
int parse_options(int argc, char *argv[]) {
133135
int c, local_port = 0;
134136

135-
while ((c = getopt(argc, argv, "l:h:p:i:o:fs")) != -1) {
137+
while ((c = getopt(argc, argv, "b:l:h:p:i:o:fs")) != -1) {
136138
switch(c) {
137139
case 'l':
138140
local_port = atoi(optarg);
139141
break;
142+
case 'b':
143+
bind_addr = optarg;
144+
break;
140145
case 'h':
141146
remote_host = optarg;
142147
break;
@@ -181,7 +186,11 @@ int create_socket(int port) {
181186
memset(&server_addr, 0, sizeof(server_addr));
182187
server_addr.sin_family = AF_INET;
183188
server_addr.sin_port = htons(port);
184-
server_addr.sin_addr.s_addr = INADDR_ANY;
189+
if (bind_addr == NULL) {
190+
server_addr.sin_addr.s_addr = INADDR_ANY;
191+
} else {
192+
server_addr.sin_addr.s_addr = inet_addr(bind_addr);
193+
}
185194

186195
if (bind(server_sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) != 0) {
187196
return SERVER_BIND_ERROR;

0 commit comments

Comments
 (0)