[PVFS2-CVS] commit by slang in pvfs2/src/io/bmi/bmi_tcp: bmi-tcp.c sockio.c sockio.h

CVS commit program cvs at parl.clemson.edu
Thu Aug 25 17:38:23 EDT 2005


Update of /projects/cvsroot/pvfs2/src/io/bmi/bmi_tcp
In directory parlweb:/tmp/cvs-serv7520/src/io/bmi/bmi_tcp

Modified Files:
      Tag: slang-event-changes-branch
	bmi-tcp.c sockio.c sockio.h 
Log Message:
updates to my event changes to bring them inline with trunk


Index: bmi-tcp.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/bmi/bmi_tcp/bmi-tcp.c,v
diff -p -u -r1.90.4.2 -r1.90.4.3
--- bmi-tcp.c	7 Jun 2005 21:59:12 -0000	1.90.4.2
+++ bmi-tcp.c	25 Aug 2005 20:38:23 -0000	1.90.4.3
@@ -16,6 +16,11 @@
 #include <sys/uio.h>
 #include <time.h>
 
+#include "pvfs2-config.h"
+#ifdef HAVE_NETDB_H
+#include <netdb.h>
+#endif
+
 #include "bmi-method-support.h"
 #include "bmi-method-callback.h"
 #include "bmi-tcp-addressing.h"
@@ -50,6 +55,7 @@ do \
                          PVFS_EVENT_FLAG_END, 0, __tmpid);  \
 } while(0)
 
+    
 static gen_mutex_t interface_mutex = GEN_MUTEX_INITIALIZER;
 
 /* function prototypes */
@@ -120,6 +126,7 @@ int BMI_tcp_testcontext(int incount,
 		     int max_idle_time_ms,
 		     bmi_context_id context_id);
 method_addr_p BMI_tcp_method_addr_lookup(const char *id_string);
+const char* BMI_tcp_addr_rev_lookup_unexpected(method_addr_p map);
 int BMI_tcp_post_send_list(bmi_op_id_t * id,
 			   method_addr_p dest,
 			   const void *const *buffer_list,
@@ -295,6 +302,7 @@ struct bmi_method_ops bmi_tcp_ops = {
     BMI_tcp_open_context,
     BMI_tcp_close_context,
     BMI_tcp_cancel,
+    BMI_tcp_addr_rev_lookup_unexpected,
 };
 
 /* module parameters */
@@ -1376,6 +1384,43 @@ int BMI_tcp_cancel(bmi_op_id_t id, bmi_c
     return(0);
 }
 
+/* BMI_tcp_addr_rev_lookup_unexpected()
+ *
+ * looks up an address that was initialized unexpectedly and returns a string
+ * hostname
+ *
+ * returns string on success, "UNKNOWN" on failure
+ */
+const char* BMI_tcp_addr_rev_lookup_unexpected(method_addr_p map)
+{
+    struct tcp_addr *tcp_addr_data = map->method_data;
+    socklen_t peerlen = sizeof(struct sockaddr_in);
+    struct sockaddr_in peer;
+    int ret;
+    struct hostent *peerent;
+
+
+    ret = getpeername(tcp_addr_data->socket, (struct sockaddr*)&(peer), &peerlen);
+    if(ret < 0)
+    {
+        return("UNKNOWN");
+    }
+
+#ifdef HAVE_GETHOSTBYADDR
+    
+    peerent = gethostbyaddr((void*)&peer.sin_addr.s_addr, 
+        sizeof(struct in_addr), AF_INET);
+    if(peerent == NULL)
+    {
+        return("UNKNOWN");
+    }
+ 
+    return(peerent->h_name);
+#else
+    return ("UNKNOWN");
+#endif
+}
+
 /* tcp_forget_addr()
  *
  * completely removes a tcp method address from use, and aborts any
@@ -1505,7 +1550,7 @@ static int tcp_server_init(void)
     if ((tcp_addr_data->socket = BMI_sockio_new_sock()) < 0)
     {
 	tmp_errno = errno;
-	gossip_lerr("Error: BMI_sockio_new_sock: %s\n", strerror(tmp_errno));
+	gossip_err("Error: BMI_sockio_new_sock: %s\n", strerror(tmp_errno));
 	return (bmi_tcp_errno_to_pvfs(-tmp_errno));
     }
 
@@ -1658,7 +1703,7 @@ static int tcp_sock_init(method_addr_p m
 	fcntl(tcp_addr_data->socket, F_SETFL, oldfl | O_NONBLOCK);
     }
 
-    /* turn of Nagle's algorithm */
+    /* turn off Nagle's algorithm */
     if (BMI_sockio_set_tcpopt(tcp_addr_data->socket, TCP_NODELAY, 1) < 0)
     {
 	tmp_errno = errno;
@@ -1673,9 +1718,9 @@ static int tcp_sock_init(method_addr_p m
 		      "Connect: socket=%d, hostname=%s, port=%d\n",
 		      tcp_addr_data->socket, tcp_addr_data->hostname,
 		      tcp_addr_data->port);
-	ret =
-	    BMI_sockio_connect_sock(tcp_addr_data->socket, tcp_addr_data->hostname,
-			 tcp_addr_data->port);
+	ret = BMI_sockio_connect_sock(tcp_addr_data->socket,
+                      tcp_addr_data->hostname,
+		      tcp_addr_data->port);
     }
     else
     {
@@ -1691,8 +1736,9 @@ static int tcp_sock_init(method_addr_p m
 	}
 	else
 	{
-	    gossip_lerr("Error: BMI_sockio_connect_sock: %s\n", strerror(errno));
-	    return (bmi_tcp_errno_to_pvfs(-errno));
+            /* BMI_sockio_connect_sock returns a PVFS error */
+            PVFS_perror_gossip("Error: BMI_sockio_connect_sock", ret);
+	    return (ret);
 	}
     }
 
@@ -1904,8 +1950,8 @@ static int tcp_post_recv_generic(bmi_op_
 	/* make sure it isn't too big */
 	if (query_op->actual_size > expected_size)
 	{
-	    gossip_lerr("Error: message ordering violation;\n");
-	    gossip_lerr("Error: message too large for next buffer.\n");
+	    gossip_err("Error: message ordering violation;\n");
+	    gossip_err("Error: message too large for next buffer.\n");
 	    return (bmi_tcp_errno_to_pvfs(-EPROTO));
 	}
 
@@ -1948,8 +1994,8 @@ static int tcp_post_recv_generic(bmi_op_
 	/* make sure it isn't too big */
 	if (query_op->actual_size > expected_size)
 	{
-	    gossip_lerr("Error: message ordering violation;\n");
-	    gossip_lerr("Error: message too large for next buffer.\n");
+	    gossip_err("Error: message ordering violation;\n");
+	    gossip_err("Error: message too large for next buffer.\n");
 	    return (bmi_tcp_errno_to_pvfs(-EPROTO));
 	}
 
@@ -2031,7 +2077,7 @@ static int tcp_post_recv_generic(bmi_op_
 		0);
 	    if (ret < 0)
 	    {
-		gossip_lerr("Error: payload_progress: %s\n", strerror(-ret));
+                PVFS_perror_gossip("Error: payload_progress", ret);
 		tcp_forget_addr(query_op->addr, 0, ret);
 		return (ret);
 	    }
@@ -2585,9 +2631,9 @@ static int tcp_do_work_recv(method_addr_
 	/* make sure it isn't too big */
 	if (new_header.size > active_method_op->expected_size)
 	{
-	    gossip_lerr("Error: message ordering violation;\n");
-	    gossip_lerr("Error: message too large for next buffer.\n");
-	    gossip_lerr("Error: incoming size: %ld, expected size: %ld\n",
+	    gossip_err("Error: message ordering violation;\n");
+	    gossip_err("Error: message too large for next buffer.\n");
+	    gossip_err("Error: incoming size: %ld, expected size: %ld\n",
 			(long) new_header.size,
 			(long) active_method_op->expected_size);
 	    /* TODO: return error here or do something else? */
@@ -2682,6 +2728,7 @@ static int work_on_send_op(method_op_p m
 	ret = tcp_sock_init(my_method_op->addr);
 	if (ret < 0)
 	{
+            PVFS_perror_gossip("Error: socket failed to init", ret);
 	    tcp_forget_addr(my_method_op->addr, 0, ret);
 	    return (0);
 	}
@@ -2705,7 +2752,7 @@ static int work_on_send_op(method_op_p m
 	&my_method_op->env_amt_complete);
     if (ret < 0)
     {
-	gossip_err("Error: payload_progress: %s\n", strerror(-ret));
+        PVFS_perror_gossip("Error: payload_progress", ret);
 	tcp_forget_addr(my_method_op->addr, 0, ret);
 	return (0);
     }
@@ -2772,7 +2819,7 @@ static int work_on_recv_op(method_op_p m
 	    0);
 	if (ret < 0)
 	{
-	    gossip_lerr("Error: payload_progress: %s\n", strerror(-ret));
+            PVFS_perror_gossip("Error: payload_progress", ret);
 	    tcp_forget_addr(my_method_op->addr, 0, ret);
 	    return (0);
 	}
@@ -2905,7 +2952,7 @@ static int tcp_accept_init(int *socket)
 	}
 	else
 	{
-	    gossip_lerr("Error: accept: %s\n", strerror(errno));
+	    gossip_err("Error: accept: %s\n", strerror(errno));
 	    return (bmi_tcp_errno_to_pvfs(-errno));
 	}
     }
@@ -3033,7 +3080,7 @@ static int BMI_tcp_post_send_generic(bmi
 #endif
 	if (ret < 0)
 	{
-	    gossip_lerr("Error: enqueue_operation() or tcp_do_work() returned: %d\n", ret);
+	    gossip_err("Error: enqueue_operation() or tcp_do_work() returned: %d\n", ret);
 	}
 	return (ret);
     }
@@ -3071,7 +3118,7 @@ static int BMI_tcp_post_send_generic(bmi
 				context_id);
 	if(ret < 0)
 	{
-	    gossip_lerr("Error: enqueue_operation() returned: %d\n", ret);
+	    gossip_err("Error: enqueue_operation() returned: %d\n", ret);
 	}
 	return (ret);
     }
@@ -3084,9 +3131,7 @@ static int BMI_tcp_post_send_generic(bmi
 	&cur_index_complete, BMI_SEND, my_header.enc_hdr, &env_amt_complete);
     if (ret < 0)
     {
-        char buf[64] = {0};
-        PVFS_strerror_r(-ret, buf, 64);
-	gossip_lerr("Error: payload_progress: %s\n", buf);
+        PVFS_perror_gossip("Error: payload_progress", ret);
 	tcp_forget_addr(dest, 0, ret);
 	return (ret);
     }
@@ -3110,7 +3155,7 @@ static int BMI_tcp_post_send_generic(bmi
 
     if(ret < 0)
     {
-	gossip_lerr("Error: enqueue_operation() returned: %d\n", ret);
+	gossip_err("Error: enqueue_operation() returned: %d\n", ret);
     }
     return (ret);
 }

Index: sockio.c
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/bmi/bmi_tcp/sockio.c,v
diff -p -u -r1.17 -r1.17.4.1
--- sockio.c	9 Feb 2005 23:26:15 -0000	1.17
+++ sockio.c	25 Aug 2005 20:38:23 -0000	1.17.4.1
@@ -65,20 +65,38 @@ int BMI_sockio_connect_sock(int sockd,
 		 int service)
 {
     struct sockaddr saddr;
+    int ret;
 
-    if (BMI_sockio_init_sock(&saddr, name, service) != 0)
-	return (-1);
+    if ((ret = BMI_sockio_init_sock(&saddr, name, service)) != 0)
+	return (ret); /* converted to PVFS error code below */
   connect_sock_restart:
     if (connect(sockd, (struct sockaddr *) &saddr, sizeof(saddr)) < 0)
     {
 	if (errno == EINTR)
 	    goto connect_sock_restart;
-	return (-1);
+        return (-PVFS_ERROR_CODE(errno));
     }
     return (sockd);
 }
 
 #ifdef HAVE_GETHOSTBYNAME
+static int conv_h_errno(int herr)
+{   
+    switch (herr)
+    {
+    case HOST_NOT_FOUND :
+        return BMI_EHOSTNTFD;
+    case NO_ADDRESS :
+        return BMI_EADDRNTFD;
+    case NO_RECOVERY :
+        return BMI_ENORECVR;
+    case TRY_AGAIN :
+        return BMI_ETRYAGAIN;
+    default :
+        return herr;
+    }
+}
+
 /* gethostbyname version */
 int BMI_sockio_init_sock(struct sockaddr *saddrp,
 			 const char *name,
@@ -91,12 +109,12 @@ int BMI_sockio_init_sock(struct sockaddr
     {
 	if ((hep = gethostbyname("localhost")) == NULL)
 	{
-	    return (-1);
+	    return (-conv_h_errno(h_errno));
 	}
     }
     else if ((hep = gethostbyname(name)) == NULL)
     {
-	return (-1);
+	return (-conv_h_errno(h_errno));
     }
     ((struct sockaddr_in *) saddrp)->sin_family = AF_INET;
     ((struct sockaddr_in *) saddrp)->sin_port = htons((u_short) service);
@@ -389,7 +407,9 @@ int BMI_sockio_nbsendfile(int s,
 int BMI_sockio_get_sockopt(int s,
 		int optname)
 {
-    int val, len = sizeof(val);
+    int val;
+    socklen_t len = sizeof(val);
+
     if (getsockopt(s, SOL_SOCKET, optname, &val, &len) == -1)
 	return (-1);
     else

Index: sockio.h
===================================================================
RCS file: /projects/cvsroot/pvfs2/src/io/bmi/bmi_tcp/sockio.h,v
diff -p -u -r1.13 -r1.13.6.1
--- sockio.h	28 Jul 2004 14:32:41 -0000	1.13
+++ sockio.h	25 Aug 2005 20:38:23 -0000	1.13.6.1
@@ -27,6 +27,8 @@
 #include <netinet/in.h>
 #include <stdio.h>
 
+#include "bmi-types.h"
+
 int BMI_sockio_new_sock(void);
 int BMI_sockio_bind_sock(int,
 			 int);



More information about the PVFS2-CVS mailing list