[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