@@ -80,7 +80,7 @@ void plog(int priority, const char *format, ...);
8080
8181int server_sock , client_sock , remote_sock , remote_port = 0 ;
8282int connections_processed = 0 ;
83- char * remote_host , * cmd_in , * cmd_out ;
83+ char * bind_addr , * remote_host , * cmd_in , * cmd_out ;
8484bool foreground = FALSE;
8585bool 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[]) {
132134int 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