--- bounce.c.orig	Mon May 28 09:07:37 2007
+++ bounce.c	Mon May 28 09:08:41 2007
@@ -138,7 +138,7 @@
 }
 
 int main(int argc,char *argv[]) {
-    int srv_fd, rem_fd, len, cl_fd, on=1, b=0;
+    int srv_fd, rem_fd, len, cl_fd, on=1, b=0, d=0;
     int myport=DEFAULT_PORT, remoteport;
     struct sockaddr_in rem_addr, srv_addr, cl_addr;
     char *myname;
@@ -153,9 +153,10 @@
 
     /* Process arguments */
 
-    while( (ch = getopt(argc, argv, "p:a:b:")) != -1  ) {
+    while( (ch = getopt(argc, argv, "p:a:b:d")) != -1  ) {
       switch(ch) { 
       case 'b': b = 1;
+      case 'd': d = 1; break;
       case 'a':
 	hostname = malloc( strlen(optarg) + 1);
 	if( !hostname ) {
@@ -178,7 +179,7 @@
     argv += optind;
 
     if (argc!=2) {
-	fprintf(stderr,"Use: %s [-a localaddr | -b localaddr] [-p localport] machine port \n",myname);
+	fprintf(stderr,"Use: %s [-a localaddr | -b localaddr] [-p localport] [-d] machine port \n",myname);
 	exit(-1);
     }
     if ((remoteport=atoi(argv[1]))<=0) {
@@ -261,6 +262,11 @@
 	    if (bind(cl_fd,(struct sockaddr *)&srv_addr,sizeof(srv_addr))<0) {
 		close(rem_fd);
 		exit(-1);
+	    }
+	    }
+	    if (d) {
+	    if ((hp=gethostbyname(argv[0]))!=NULL) {
+		cl_addr.sin_addr=*(struct in_addr *)(hp->h_addr_list[0]);
 	    }
 	    }
 	    if (connect(cl_fd, (struct sockaddr *)&cl_addr, 
