--- Miscellaneous/io/library/globus_io_tcp.c.orig	Fri Mar  8 14:28:26 2002
+++ Miscellaneous/io/library/globus_io_tcp.c	Fri Mar  8 14:28:31 2002
@@ -22,8 +22,8 @@
  * CVS Information:
  *
  * $Source: /home/globus/globus/sources/globus/Miscellaneous/io/library/globus_io_tcp.c,v $
- * $Date: 2002/03/07 16:02:55 $
- * $Revision: 1.1 $
+ * $Date: 2002/03/08 13:27:47 $
+ * $Revision: 1.2 $
  * $State: Exp $
  * $Author: globus $
  */
@@ -32,7 +32,7 @@
 /**
  * RCS Identification of this source file
  */
-static char *rcsid = "$Header: /home/globus/globus/sources/globus/Miscellaneous/io/library/globus_io_tcp.c,v 1.1 2002/03/07 16:02:55 globus Exp $";
+static char *rcsid = "$Header: /home/globus/globus/sources/globus/Miscellaneous/io/library/globus_io_tcp.c,v 1.2 2002/03/08 13:27:47 globus Exp $";
 #endif
 
 
@@ -222,6 +222,44 @@
 	goto error_exit;
     }
     handle->type = GLOBUS_IO_HANDLE_TYPE_TCP_CONNECTED;
+
+    {
+    char * tag_env_port_range;
+    int tag_port_min, tag_port_max;
+    tag_env_port_range=getenv("GLOBUS_TAG_OUTPUT_TCP_PORT_RANGE");
+    if (tag_env_port_range != NULL)
+	{
+	/* Parsing GLOBUS_TAG_OUTPUT_TCP_PORT_RANGE : format min,max */
+        if ((sscanf(tag_env_port_range,"%d,%d",&tag_port_min,&tag_port_max) == 2) 
+		&& 
+	    (tag_port_min<tag_port_max)
+  	   )
+		{
+		/* Parsing is OK */
+		int tag_candidate_port;
+		unsigned char tag_candidate_succeeded = 0;
+		struct sockaddr_in tag_my_addr ;
+			tag_my_addr.sin_family = AF_INET;
+			inet_aton("0.0.0.0",&tag_my_addr.sin_addr); /* Unchecked, Watch out */
+
+			for (tag_candidate_port=tag_port_min ; tag_candidate_port <= tag_port_max  ; tag_candidate_port++)
+				{
+      				tag_my_addr.sin_port=htons(tag_candidate_port);
+				
+				if (bind (handle->fd,(struct sockaddr *)&tag_my_addr,sizeof tag_my_addr) ==0)
+					{
+					/* OK, could bind to candidate socket */
+					tag_candidate_succeeded = 1;
+					break;
+					}
+				}
+			if (!tag_candidate_succeeded) fprintf(stderr,"TAG : Could not find ports in given range [%d:%d]\n",tag_port_min,tag_port_max);
+		}
+        else {
+	  fprintf(stderr,"TAG : Error in GLOBUS_TAG_OUTPUT_TCP_PORT_RANGE, could not parse [%s]\n",tag_env_port_range);
+	     }  /* End if ((sscanf(ta...... */
+	}   /* End if (tag_env_port_range != NULL) */
+    }
     
 
     /* start connecting */
