1
1

These are the changes after the review with Jeff. Mostly are fixes for OOB and TCP

This commit was SVN r4070.
Этот коммит содержится в:
Prabhanjan Kambadur 2005-01-20 00:03:23 +00:00
родитель b922a56938
Коммит 9ac9f15537
30 изменённых файлов: 369 добавлений и 244 удалений

Просмотреть файл

@ -236,12 +236,4 @@ extern "C" {
#define __func__ __FILE__
#endif
/*
* One windows machines, ompi_errno will already be defined
*/
#ifndef ompi_errno
#define ompi_errno errno
#endif
#endif /* OMPI_CONFIG_BOTTOM_H */

Просмотреть файл

@ -1,2 +1,3 @@
event.c
err.c
select.c

Просмотреть файл

@ -126,15 +126,15 @@ win32_dispatch(void *arg, struct timeval *tv)
if(res == WAIT_TIMEOUT || res == WAIT_FAILED) {
signal_process();
return (0);
continue;
} else if (signal_caught)
signal_process();
evres = 0;
if(ev->ev_events & OMPI_EV_READ)
if(ev->ev_events & OMPI_EV_READ)
evres |= OMPI_EV_READ;
if(ev->ev_events & OMPI_EV_WRITE)
if(ev->ev_events & OMPI_EV_WRITE)
evres |= OMPI_EV_WRITE;
if(evres) {
if(!(ev->ev_events & OMPI_EV_PERSIST))

Просмотреть файл

@ -80,9 +80,15 @@ extern const struct ompi_eventop ompi_epollops;
#if defined(HAVE_WORKING_KQUEUE) && HAVE_WORKING_KQUEUE
extern const struct ompi_eventop ompi_kqops;
#endif
#if 0
/* This is to prevent event library from picking up the win32_ops since this will
be picked up over select(). By using select, we can pretty much use the OOB and
PTL as is. Otherwise, there would have to be a lot of magic to be done to get
this to work */
#if defined(WIN32) && WIN32
extern const struct ompi_eventop ompi_win32ops;
#endif
#endif
/* In order of preference */
static const struct ompi_eventop *ompi_eventops[] = {
@ -103,8 +109,14 @@ static const struct ompi_eventop *ompi_eventops[] = {
#if defined(HAVE_SELECT) && HAVE_SELECT
&ompi_selectops,
#endif
#if 0
/* This is to prevent event library from picking up the win32_ops since this will
be picked up over select(). By using select, we can pretty much use the OOB and
PTL as is. Otherwise, there would have to be a lot of magic to be done to get
this to work */
#if defined(WIN32) && WIN32
&ompi_win32ops,
#endif
#endif
NULL
};

Просмотреть файл

@ -67,7 +67,20 @@ extern "C" {
#ifdef OMPI_EVENT_USE_SIGNALS
#undef OMPI_EVENT_USE_SIGNALS
#endif
#ifdef WIN32
/* We do not have the required framework for EVENT_SIGNALS to work on windows.
We currently use the select module on windows without the EVENT_SIGNALS.
This might have adverse effect in 2 cases:
1. People using event library for keeping track of file descriptors (NOT
socket descriptors) will have to come up with something else since
select() under windows works only on sockets.
2. Since the EVENT_SIGNALS are disabled, instances of code which rely on
this mechanism will NOT work under windows
*/
#define OMPI_EVENT_USE_SIGNALS 0
#else
#define OMPI_EVENT_USE_SIGNALS 1
#endif
/* Fix so that ppl dont have to run with <sys/queue.h> */
#ifndef TAILQ_ENTRY

Просмотреть файл

@ -57,7 +57,9 @@
#endif
#include "event.h"
#if OMPI_EVENT_USE_SIGNALS
#include "evsignal.h"
#endif
#include "threads/mutex.h"
extern struct ompi_event_list ompi_eventqueue;
@ -67,14 +69,18 @@ extern ompi_mutex_t ompi_event_lock;
#define howmany(x, y) (((x)+((y)-1))/(y))
#endif
#if OMPI_EVENT_USE_SIGNALS
extern volatile sig_atomic_t ompi_evsignal_caught;
#endif
static struct selectop {
int event_fds; /* Highest fd in fd set */
int event_fdsz;
fd_set *event_readset;
fd_set *event_writeset;
#if OMPI_EVENT_USE_SIGNALS
sigset_t evsigmask;
#endif
} sop;
static void *select_init (void);
@ -88,7 +94,11 @@ const struct ompi_eventop ompi_selectops = {
select_init,
select_add,
select_del,
#ifdef WIN32
NULL,
#else
select_recalc,
#endif
select_dispatch
};
@ -99,7 +109,15 @@ select_init(void)
if (getenv("EVENT_NOSELECT"))
return (NULL);
memset(&sop, 0, sizeof(sop));
#ifdef WIN32
sop.event_fds = FD_SETSIZE;
sop.event_fdsz = FD_SETSIZE;
sop.event_readset = malloc (sizeof(fd_set));
sop.event_writeset = malloc (sizeof(fd_set));
#endif
#if OMPI_EVENT_USE_SIGNALS
ompi_evsignal_init(&sop.evsigmask);
#endif
return (&sop);
}
@ -108,6 +126,7 @@ select_init(void)
* recalculate everything.
*/
#ifndef WIN32
static int
select_recalc(void *arg, int max)
{
@ -153,6 +172,7 @@ select_recalc(void *arg, int max)
return (0);
#endif
}
#endif
static int
select_dispatch(void *arg, struct timeval *tv)
@ -161,8 +181,10 @@ select_dispatch(void *arg, struct timeval *tv)
struct ompi_event *ev, *next;
struct selectop *sop = arg;
#ifndef WIN32
memset(sop->event_readset, 0, sop->event_fdsz);
memset(sop->event_writeset, 0, sop->event_fdsz);
#endif
TAILQ_FOREACH(ev, &ompi_eventqueue, ev_next) {
if (ev->ev_events & OMPI_EV_WRITE)

129
src/include/ompi_socket_errno.h Обычный файл
Просмотреть файл

@ -0,0 +1,129 @@
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef OMPI_GET_SOCKET_ERROR_H
#define OMPI_GET_SOCKET_ERROR_H
/* In windows, sockets return differnt error codes than the linux counter parts. Although,
one can find there are some similarities in the naming, there are definite differences.
ompi_socket_errno is defined to be errno under linux and ompi_get_socket_errno under
windows to ensure that the code which uses errno does not have to be changed. In windows,
the mapping is taken care of by ompi_get_socket_errno().
ANYONE USING SOCKET FUNCTIONS' RETURN VALUE PLEASE USE ompi_socket_errno INSTEAD
OF errno FOR COMPATIBILITY */
#include <errno.h>
#include "include/constants.h"
#ifdef WIN32
#define ompi_socket_errno ompi_get_socket_errno()
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
#define EALREADY WSAEALREADY
#define ENOTSOCK WSAENOTSOCK
#define EDESTADDRREQ WSAEDESTADDRREQ
#define EMSGSIZE WSAEMSGSIZE
#define EPROTOTYPE WSAEPROTOTYPE
#define ENOPROTOOPT WSAENOPROTOOPT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EADDRINUSE WSAEADDRINUSE
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
#define ENETDOWN WSAENETDOWN
#define ENETUNREACH WSAENETUNREACH
#define ENETRESET WSAENETRESET
#define ECONNABORTED WSAECONNABORTED
#define ECONNRESET WSAECONNRESET
#define ENOBUFS WSAENOBUFS
#define EISCONN WSAEISCONN
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
/*
* pound define ompi_get_error() to be ompi_errno. so, in windows land
* this simply defaults to being errno
*/
/* return directly from the case statments */
static __inline int ompi_get_socket_errno(void) {
int ret = WSAGetLastError();
switch (ret) {
case WSAEINTR: return EINTR;
case WSAEBADF: return EBADF;
case WSAEACCES: return EACCES;
case WSAEFAULT: return EFAULT;
case WSAEINVAL: return EINVAL;
case WSAEMFILE: return EMFILE;
case WSAEWOULDBLOCK: return EWOULDBLOCK;
case WSAEINPROGRESS: return EINPROGRESS;
case WSAEALREADY: return EALREADY;
case WSAENOTSOCK: return ENOTSOCK;
case WSAEDESTADDRREQ: return EDESTADDRREQ;
case WSAEMSGSIZE: return EMSGSIZE;
case WSAEPROTOTYPE: return EPROTOTYPE;
case WSAENOPROTOOPT: return ENOPROTOOPT;
case WSAEPROTONOSUPPORT: return EPROTONOSUPPORT;
case WSAESOCKTNOSUPPORT: return ESOCKTNOSUPPORT;
case WSAEOPNOTSUPP: return EOPNOTSUPP;
case WSAEPFNOSUPPORT: return EPFNOSUPPORT;
case WSAEAFNOSUPPORT: return EAFNOSUPPORT;
case WSAEADDRINUSE: return EADDRINUSE;
case WSAEADDRNOTAVAIL: return EADDRNOTAVAIL;
case WSAENETDOWN: return ENETDOWN;
case WSAENETUNREACH: return ENETUNREACH;
case WSAENETRESET: return ENETRESET;
case WSAECONNABORTED: return ECONNABORTED;
case WSAECONNRESET: return ECONNRESET;
case WSAENOBUFS: return ENOBUFS;
case WSAEISCONN: return EISCONN;
case WSAENOTCONN: return ENOTCONN;
case WSAESHUTDOWN: return ESHUTDOWN;
case WSAETOOMANYREFS: return ETOOMANYREFS;
case WSAETIMEDOUT: return ETIMEDOUT;
case WSAECONNREFUSED: return ECONNREFUSED;
case WSAELOOP: return ELOOP;
case WSAENAMETOOLONG: return ENAMETOOLONG;
case WSAEHOSTDOWN: return EHOSTDOWN;
case WSAEHOSTUNREACH: return EHOSTUNREACH;
case WSAENOTEMPTY: return ENOTEMPTY;
case WSAEPROCLIM: return EPROCLIM;
case WSAEUSERS: return EUSERS;
case WSAEDQUOT: return EDQUOT;
case WSAESTALE: return ESTALE;
case WSAEREMOTE: return EREMOTE;
default: printf("Feature not implemented: %d %s\n", __LINE__, __FILE__); return OMPI_ERROR;
};
}
#else
#define ompi_socket_errno errno
#endif
#endif /* OMPI_GET_ERROR_H */

Просмотреть файл

@ -18,6 +18,7 @@
#include <stdlib.h>
#include "mpi.h"
#include "include/constants.h"
#include "mca/mca.h"
#include "mca/base/base.h"
@ -29,7 +30,7 @@ int mca_base_alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
/* Error checks */
if (0 == size)
return MPI_SUCCESS;
return OMPI_SUCCESS;
else if (size < 0)
return OMPI_ERROR;
@ -42,7 +43,7 @@ int mca_base_alloc_mem(MPI_Aint size, MPI_Info info, void *baseptr)
/* All done */
*((void **) baseptr) = temp;
return MPI_SUCCESS;
return OMPI_SUCCESS;
}
@ -51,6 +52,6 @@ int mca_base_free_mem(void *baseptr)
if (NULL != baseptr)
free(baseptr);
return MPI_SUCCESS;
return OMPI_SUCCESS;
}

Просмотреть файл

@ -61,9 +61,15 @@
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_LIBGEN_H
#include <libgen.h>
#endif
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include "include/constants.h"
@ -185,11 +191,11 @@ extern "C" {
/*
* globals that might be needed
*/
extern int mca_gpr_base_output;
extern mca_gpr_base_module_t ompi_registry; /* holds selected module's function pointers */
extern bool mca_gpr_base_selected;
extern ompi_list_t mca_gpr_base_components_available;
extern mca_gpr_base_component_t mca_gpr_base_selected_component;
OMPI_DECLSPEC extern int mca_gpr_base_output;
OMPI_DECLSPEC extern mca_gpr_base_module_t ompi_registry; /* holds selected module's function pointers */
OMPI_DECLSPEC extern bool mca_gpr_base_selected;
OMPI_DECLSPEC extern ompi_list_t mca_gpr_base_components_available;
OMPI_DECLSPEC extern mca_gpr_base_component_t mca_gpr_base_selected_component;
#endif

Просмотреть файл

@ -26,8 +26,12 @@
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef HAVE_LIBGEN_H
#include <libgen.h>
#endif
#include "include/constants.h"

Просмотреть файл

@ -26,6 +26,7 @@
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#include "include/ompi_socket_errno.h"
#include "util/output.h"
#include "util/if.h"
#include "mca/oob/tcp/oob_tcp.h"
@ -34,6 +35,11 @@
#include "mca/pcmclient/pcmclient.h"
#include "mca/pcmclient/base/base.h"
#define IMPORTANT_WINDOWS_COMMENT() \
/* In windows, many of the socket functions return an EWOULDBLOCK instead of \
things like EAGAIN, EINPROGRESS, etc. It has been verified that this will \
not conflict with other error codes that are returned by these functions \
under UNIX/Linux environments */
/*
* Data structure for accepting connections.
@ -239,10 +245,11 @@ static void mca_oob_tcp_accept(void)
sd = accept(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr*)&addr, &addrlen);
if(sd < 0) {
if(ompi_errno == EINTR)
if(ompi_socket_errno == EINTR)
continue;
if(ompi_errno != EAGAIN || ompi_errno != EWOULDBLOCK)
ompi_output(0, "mca_oob_tcp_accept: accept() failed with ompi_errno %d.", ompi_errno);
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EAGAIN || ompi_socket_errno != EWOULDBLOCK)
ompi_output(0, "mca_oob_tcp_accept: accept() failed with errno %d.", ompi_socket_errno);
return;
}
@ -267,14 +274,14 @@ static int mca_oob_tcp_create_listen(void)
/* create a listen socket for incoming connections */
mca_oob_tcp_component.tcp_listen_sd = socket(AF_INET, SOCK_STREAM, 0);
if(mca_oob_tcp_component.tcp_listen_sd < 0) {
ompi_output(0,"mca_oob_tcp_component_init: socket() failed with ompi_errno=%d", ompi_errno);
ompi_output(0,"mca_oob_tcp_component_init: socket() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* allow port to be re-used - for temporary fixed port numbers */
if (setsockopt(
mca_oob_tcp_component.tcp_listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&optval, sizeof(optval)) < 0) {
ompi_output(0, "mca_oob_tcp_create_listen: setsockopt(SO_REUSEADDR) failed with ompi_errno=%d\n",
ompi_errno);
ompi_output(0, "mca_oob_tcp_create_listen: setsockopt(SO_REUSEADDR) failed with errno=%d\n",
ompi_socket_errno);
}
memset(&inaddr, 0, sizeof(inaddr));
@ -283,32 +290,32 @@ static int mca_oob_tcp_create_listen(void)
inaddr.sin_port = 0;
if(bind(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) {
ompi_output(0,"mca_oob_tcp_create_listen: bind() failed with ompi_errno=%d", ompi_errno);
ompi_output(0,"mca_oob_tcp_create_listen: bind() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* resolve system assigned port */
addrlen = sizeof(struct sockaddr_in);
if(getsockname(mca_oob_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
ompi_output(0, "mca_oob_tcp_create_listen: getsockname() failed with ompi_errno=%d", ompi_errno);
ompi_output(0, "mca_oob_tcp_create_listen: getsockname() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
mca_oob_tcp_component.tcp_listen_port = inaddr.sin_port;
/* setup listen backlog to maximum allowed by kernel */
if(listen(mca_oob_tcp_component.tcp_listen_sd, SOMAXCONN) < 0) {
ompi_output(0, "mca_oob_tcp_component_init: listen() failed with ompi_errno=%d", ompi_errno);
ompi_output(0, "mca_oob_tcp_component_init: listen() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* set socket up to be non-blocking, otherwise accept could block */
if((flags = fcntl(mca_oob_tcp_component.tcp_listen_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_oob_tcp_component_init: fcntl(F_GETFL) failed with ompi_errno=%d", ompi_errno);
ompi_output(0, "mca_oob_tcp_component_init: fcntl(F_GETFL) failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
} else {
flags |= O_NONBLOCK;
if(fcntl(mca_oob_tcp_component.tcp_listen_sd, F_SETFL, flags) < 0) {
ompi_output(0, "mca_oob_tcp_component_init: fcntl(F_SETFL) failed with ompi_errno=%d", ompi_errno);
ompi_output(0, "mca_oob_tcp_component_init: fcntl(F_SETFL) failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
}
@ -354,9 +361,9 @@ static void mca_oob_tcp_recv_handler(int sd, short flags, void* user)
close(sd);
return;
}
if(ompi_errno != EINTR) {
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: recv() failed with ompi_errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_errno);
if(ompi_socket_errno != EINTR) {
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: recv() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_socket_errno);
close(sd);
return;
}
@ -366,13 +373,13 @@ static void mca_oob_tcp_recv_handler(int sd, short flags, void* user)
/* now set socket up to be non-blocking */
if((flags = fcntl(sd, F_GETFL, 0)) < 0) {
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: fcntl(F_GETFL) failed with ompi_errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_errno);
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: fcntl(F_GETFL) failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_socket_errno);
} else {
flags |= O_NONBLOCK;
if(fcntl(sd, F_SETFL, flags) < 0) {
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: fcntl(F_SETFL) failed with ompi_errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_errno);
ompi_output(0, "[%d,%d,%d] mca_oob_tcp_recv_handler: fcntl(F_SETFL) failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self), ompi_socket_errno);
}
}

Просмотреть файл

@ -12,6 +12,7 @@
* $HEADER$
*/
#include "ompi_config.h"
#include "include/ompi_socket_errno.h"
#include "mca/oob/tcp/oob_tcp.h"
#include "mca/oob/tcp/oob_tcp_msg.h"
@ -23,6 +24,11 @@ static bool mca_oob_tcp_msg_recv(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* pee
static void mca_oob_tcp_msg_data(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* peer);
static void mca_oob_tcp_msg_ping(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* peer);
#define IMPORTANT_WINDOWS_COMMENT() \
/* In windows, many of the socket functions return an EWOULDBLOCK instead of \
things like EAGAIN, EINPROGRESS, etc. It has been verified that this will \
not conflict with other error codes that are returned by these functions \
under UNIX/Linux environments */
OBJ_CLASS_INSTANCE(
mca_oob_tcp_msg_t,
@ -166,15 +172,16 @@ bool mca_oob_tcp_msg_send_handler(mca_oob_tcp_msg_t* msg, struct mca_oob_tcp_pee
while(1) {
rc = writev(peer->peer_sd, msg->msg_rwptr, msg->msg_rwnum);
if(rc < 0) {
if(ompi_errno == EINTR)
if(ompi_socket_errno == EINTR)
continue;
else if (ompi_errno == EAGAIN)
IMPORTANT_WINDOWS_COMMENT();
else if (ompi_socket_errno == EAGAIN || ompi_socket_errno == EWOULDBLOCK)
return false;
else {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_msg_send_handler: writev failed with ompi_errno=%d",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_msg_send_handler: writev failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
return false;
}
@ -256,15 +263,16 @@ static bool mca_oob_tcp_msg_recv(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* pee
while(1) {
rc = readv(peer->peer_sd, msg->msg_rwptr, msg->msg_rwnum);
if(rc < 0) {
if(ompi_errno == EINTR)
if(ompi_socket_errno == EINTR)
continue;
else if (ompi_errno == EAGAIN)
IMPORTANT_WINDOWS_COMMENT();
else if (ompi_socket_errno == EAGAIN || ompi_socket_errno == EWOULDBLOCK)
return false;
else {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_msg_recv: readv failed with ompi_errno=%d",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_msg_recv: readv failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
return false;
}
@ -273,7 +281,7 @@ static bool mca_oob_tcp_msg_recv(mca_oob_tcp_msg_t* msg, mca_oob_tcp_peer_t* pee
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_msg_recv: peer closed connection",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
}
mca_oob_tcp_peer_close(peer);
return false;

Просмотреть файл

@ -22,7 +22,7 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <errno.h>
#include "include/ompi_socket_errno.h"
#ifdef HAVE_NETINET_TCP_H
#include <netinet/tcp.h>
#endif
@ -38,6 +38,11 @@
#include "oob_tcp.h"
#include "oob_tcp_peer.h"
#define IMPORTANT_WINDOWS_COMMENT() \
/* In windows, many of the socket functions return an EWOULDBLOCK instead of \
things like EAGAIN, EINPROGRESS, etc. It has been verified that this will \
not conflict with other error codes that are returned by these functions \
under UNIX/Linux environments */
static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer);
static int mca_oob_tcp_peer_event_init(mca_oob_tcp_peer_t* peer);
@ -265,10 +270,10 @@ static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer)
if (peer->peer_sd < 0) {
struct timeval tv = { 1,0 };
ompi_output(0,
"[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_start_connect: socket() failed with ompi_errno=%d\n",
"[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_start_connect: socket() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
ompi_evtimer_add(&peer->peer_timer_event, &tv);
return OMPI_ERR_UNREACH;
@ -279,17 +284,17 @@ static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer)
/* setup the socket as non-blocking */
if((flags = fcntl(peer->peer_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_connect: fcntl(F_GETFL) failed with ompi_errno=%d\n",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_connect: fcntl(F_GETFL) failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
} else {
flags |= O_NONBLOCK;
if(fcntl(peer->peer_sd, F_SETFL, flags) < 0)
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_connect: fcntl(F_SETFL) failed with ompi_errno=%d\n",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_connect: fcntl(F_SETFL) failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
}
/* pick an address in round-robin fashion from the list exported by the peer */
@ -312,14 +317,15 @@ static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer)
/* start the connect - will likely fail with EINPROGRESS */
if(connect(peer->peer_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) {
/* non-blocking so wait for completion */
if(ompi_errno == EINPROGRESS || ompi_errno == EWOULDBLOCK) {
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno == EINPROGRESS || ompi_socket_errno == EWOULDBLOCK) {
ompi_event_add(&peer->peer_send_event, 0);
return OMPI_SUCCESS;
}
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_start_connect: connect failed with ompi_errno=%d",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_start_connect: connect failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
return OMPI_ERR_UNREACH;
}
@ -331,7 +337,7 @@ static int mca_oob_tcp_peer_start_connect(mca_oob_tcp_peer_t* peer)
} else {
ompi_output(0,
"[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_start_connect: "
"mca_oob_tcp_peer_send_connect_ack failed with ompi_errno=%d",
"mca_oob_tcp_peer_send_connect_ack failed with errno=%d",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
rc);
@ -356,10 +362,10 @@ static void mca_oob_tcp_peer_complete_connect(mca_oob_tcp_peer_t* peer)
/* check connect completion status */
if(getsockopt(peer->peer_sd, SOL_SOCKET, SO_ERROR, (char *)&so_error, &so_length) < 0) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_complete_connect: getsockopt() failed with ompi_errno=%d\n",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_complete_connect: getsockopt() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
return;
}
@ -379,7 +385,7 @@ static void mca_oob_tcp_peer_complete_connect(mca_oob_tcp_peer_t* peer)
ompi_evtimer_add(&peer->peer_timer_event, &tv);
return;
} else if(so_error != 0) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_complete_connect: connect() failed with ompi_errno=%d\n",
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_complete_connect: connect() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
so_error);
@ -540,11 +546,12 @@ static int mca_oob_tcp_peer_recv_blocking(mca_oob_tcp_peer_t* peer, void* data,
/* socket is non-blocking so handle errors */
if(retval < 0) {
if(ompi_errno != EINTR && ompi_errno != EAGAIN && ompi_errno != EWOULDBLOCK) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_recv_blocking: recv() failed with ompi_errno=%d\n",
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EINTR && ompi_socket_errno != EAGAIN && ompi_socket_errno != EWOULDBLOCK) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_recv_blocking: recv() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
errno);
mca_oob_tcp_peer_close(peer);
return -1;
}
@ -566,11 +573,12 @@ static int mca_oob_tcp_peer_send_blocking(mca_oob_tcp_peer_t* peer, void* data,
while(cnt < size) {
int retval = send(peer->peer_sd, (char *)ptr+cnt, size-cnt, 0);
if(retval < 0) {
if(ompi_errno != EINTR && ompi_errno != EAGAIN && ompi_errno != EWOULDBLOCK) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_send_blocking: send() failed with ompi_errno=%d\n",
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EINTR && ompi_socket_errno != EAGAIN && ompi_socket_errno != EWOULDBLOCK) {
ompi_output(0, "[%d,%d,%d]-[%d,%d,%d] mca_oob_tcp_peer_send_blocking: send() failed with errno=%d\n",
OMPI_NAME_ARGS(mca_oob_name_self),
OMPI_NAME_ARGS(peer->peer_name),
ompi_errno);
ompi_socket_errno);
mca_oob_tcp_peer_close(peer);
return -1;
}
@ -741,13 +749,13 @@ static void mca_oob_tcp_peer_dump(mca_oob_tcp_peer_t* peer, const char* msg)
sprintf(dst, "%s", inet_ntoa(inaddr.sin_addr));
if((flags = fcntl(peer->peer_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_oob_tcp_peer_dump: fcntl(F_GETFL) failed with ompi_errno=%d\n", ompi_errno);
ompi_output(0, "mca_oob_tcp_peer_dump: fcntl(F_GETFL) failed with errno=%d\n", ompi_socket_errno);
}
#if defined(SO_SNDBUF)
optlen = sizeof(sndbuf);
if(getsockopt(peer->peer_sd, SOL_SOCKET, SO_SNDBUF, (char *)&sndbuf, &optlen) < 0) {
ompi_output(0, "mca_oob_tcp_peer_dump: SO_SNDBUF option: ompi_errno %d\n", ompi_errno);
ompi_output(0, "mca_oob_tcp_peer_dump: SO_SNDBUF option: errno %d\n", ompi_socket_errno);
}
#else
sndbuf = -1;
@ -755,7 +763,7 @@ static void mca_oob_tcp_peer_dump(mca_oob_tcp_peer_t* peer, const char* msg)
#if defined(SO_RCVBUF)
optlen = sizeof(rcvbuf);
if(getsockopt(peer->peer_sd, SOL_SOCKET, SO_RCVBUF, (char *)&rcvbuf, &optlen) < 0) {
ompi_output(0, "mca_oob_tcp_peer_dump: SO_RCVBUF option: ompi_errno %d\n", ompi_errno);
ompi_output(0, "mca_oob_tcp_peer_dump: SO_RCVBUF option: errno %d\n", ompi_socket_errno);
}
#else
rcvbuf = -1;
@ -763,7 +771,7 @@ static void mca_oob_tcp_peer_dump(mca_oob_tcp_peer_t* peer, const char* msg)
#if defined(TCP_NODELAY)
optlen = sizeof(nodelay);
if(getsockopt(peer->peer_sd, IPPROTO_TCP, TCP_NODELAY, (char *)&nodelay, &optlen) < 0) {
ompi_output(0, "mca_oob_tcp_peer_dump: TCP_NODELAY option: ompi_errno %d\n", ompi_errno);
ompi_output(0, "mca_oob_tcp_peer_dump: TCP_NODELAY option: errno %d\n", ompi_socket_errno);
}
#else
nodelay = 0;

Просмотреть файл

@ -12,7 +12,7 @@
* $HEADER$
*/
#include "ompi_config.h"
#include <errno.h>
#include "include/ompi_socket_errno.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@ -49,6 +49,11 @@
#include "ptl_tcp_sendfrag.h"
#include "ptl_tcp_sendreq.h"
#define IMPORTANT_WINDOWS_COMMENT() \
/* In windows, many of the socket functions return an EWOULDBLOCK instead of \
things like EAGAIN, EINPROGRESS, etc. It has been verified that this will \
not conflict with other error codes that are returned by these functions \
under UNIX/Linux environments */
/*
* Data structure for accepting connections.
@ -391,7 +396,7 @@ static int mca_ptl_tcp_component_create_listen(void)
/* create a listen socket for incoming connections */
mca_ptl_tcp_component.tcp_listen_sd = socket(AF_INET, SOCK_STREAM, 0);
if(mca_ptl_tcp_component.tcp_listen_sd < 0) {
ompi_output(0,"mca_ptl_tcp_component_init: socket() failed with errno=%d", errno);
ompi_output(0,"mca_ptl_tcp_component_init: socket() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
mca_ptl_tcp_set_socket_options(mca_ptl_tcp_component.tcp_listen_sd);
@ -403,32 +408,32 @@ static int mca_ptl_tcp_component_create_listen(void)
inaddr.sin_port = 0;
if(bind(mca_ptl_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, sizeof(inaddr)) < 0) {
ompi_output(0,"mca_ptl_tcp_component_init: bind() failed with errno=%d", errno);
ompi_output(0,"mca_ptl_tcp_component_init: bind() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* resolve system assignend port */
addrlen = sizeof(struct sockaddr_in);
if(getsockname(mca_ptl_tcp_component.tcp_listen_sd, (struct sockaddr*)&inaddr, &addrlen) < 0) {
ompi_output(0, "mca_ptl_tcp_component_init: getsockname() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_init: getsockname() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
mca_ptl_tcp_component.tcp_listen_port = inaddr.sin_port;
/* setup listen backlog to maximum allowed by kernel */
if(listen(mca_ptl_tcp_component.tcp_listen_sd, SOMAXCONN) < 0) {
ompi_output(0, "mca_ptl_tcp_component_init: listen() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_init: listen() failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
/* set socket up to be non-blocking, otherwise accept could block */
if((flags = fcntl(mca_ptl_tcp_component.tcp_listen_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_ptl_tcp_component_init: fcntl(F_GETFL) failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_init: fcntl(F_GETFL) failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
} else {
flags |= O_NONBLOCK;
if(fcntl(mca_ptl_tcp_component.tcp_listen_sd, F_SETFL, flags) < 0) {
ompi_output(0, "mca_ptl_tcp_component_init: fcntl(F_SETFL) failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_init: fcntl(F_SETFL) failed with errno=%d", ompi_socket_errno);
return OMPI_ERROR;
}
}
@ -571,10 +576,11 @@ static void mca_ptl_tcp_component_accept(void)
mca_ptl_tcp_event_t *event;
int sd = accept(mca_ptl_tcp_component.tcp_listen_sd, (struct sockaddr*)&addr, &addrlen);
if(sd < 0) {
if(errno == EINTR)
if(ompi_socket_errno == EINTR)
continue;
if(errno != EAGAIN || errno != EWOULDBLOCK)
ompi_output(0, "mca_ptl_tcp_component_accept: accept() failed with errno %d.", errno);
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EAGAIN || ompi_socket_errno != EWOULDBLOCK)
ompi_output(0, "mca_ptl_tcp_component_accept: accept() failed with errno %d.", ompi_socket_errno);
return;
}
mca_ptl_tcp_set_socket_options(sd);
@ -617,11 +623,11 @@ static void mca_ptl_tcp_component_recv_handler(int sd, short flags, void* user)
/* now set socket up to be non-blocking */
if((flags = fcntl(sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_ptl_tcp_component_recv_handler: fcntl(F_GETFL) failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_recv_handler: fcntl(F_GETFL) failed with errno=%d", ompi_socket_errno);
} else {
flags |= O_NONBLOCK;
if(fcntl(sd, F_SETFL, flags) < 0) {
ompi_output(0, "mca_ptl_tcp_component_recv_handler: fcntl(F_SETFL) failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_recv_handler: fcntl(F_SETFL) failed with errno=%d", ompi_socket_errno);
}
}
@ -635,7 +641,7 @@ static void mca_ptl_tcp_component_recv_handler(int sd, short flags, void* user)
/* lookup peer address */
if(getpeername(sd, (struct sockaddr*)&addr, &addr_len) != 0) {
ompi_output(0, "mca_ptl_tcp_component_recv_handler: getpeername() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_component_recv_handler: getpeername() failed with errno=%d", ompi_socket_errno);
close(sd);
return;
}

Просмотреть файл

@ -17,7 +17,7 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <errno.h>
#include "include/ompi_socket_errno.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
@ -44,6 +44,11 @@
#include "ptl_tcp_proc.h"
#include "ptl_tcp_sendfrag.h"
#define IMPORTANT_WINDOWS_COMMENT() \
/* In windows, many of the socket functions return an EWOULDBLOCK instead of \
things like EAGAIN, EINPROGRESS, etc. It has been verified that this will \
not conflict with other error codes that are returned by these functions \
under UNIX/Linux environments */
static void mca_ptl_tcp_peer_construct(mca_ptl_base_peer_t* ptl_peer);
static void mca_ptl_tcp_peer_destruct(mca_ptl_base_peer_t* ptl_peer);
@ -122,13 +127,13 @@ static void mca_ptl_tcp_peer_dump(mca_ptl_base_peer_t* ptl_peer, const char* msg
sprintf(dst, "%s", inet_ntoa(inaddr.sin_addr));
if((flags = fcntl(ptl_peer->peer_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_GETFL) failed with errno=%d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_GETFL) failed with errno=%d\n", ompi_socket_errno);
}
#if defined(SO_SNDBUF)
optlen = sizeof(sndbuf);
if(getsockopt(ptl_peer->peer_sd, SOL_SOCKET, SO_SNDBUF, (char *)&sndbuf, &optlen) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_dump: SO_SNDBUF option: errno %d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_dump: SO_SNDBUF option: errno %d\n", ompi_socket_errno);
}
#else
sndbuf = -1;
@ -136,7 +141,7 @@ static void mca_ptl_tcp_peer_dump(mca_ptl_base_peer_t* ptl_peer, const char* msg
#if defined(SO_RCVBUF)
optlen = sizeof(rcvbuf);
if(getsockopt(ptl_peer->peer_sd, SOL_SOCKET, SO_RCVBUF, (char *)&rcvbuf, &optlen) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_dump: SO_RCVBUF option: errno %d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_dump: SO_RCVBUF option: errno %d\n", ompi_socket_errno);
}
#else
rcvbuf = -1;
@ -144,7 +149,7 @@ static void mca_ptl_tcp_peer_dump(mca_ptl_base_peer_t* ptl_peer, const char* msg
#if defined(TCP_NODELAY)
optlen = sizeof(nodelay);
if(getsockopt(ptl_peer->peer_sd, IPPROTO_TCP, TCP_NODELAY, (char *)&nodelay, &optlen) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_dump: TCP_NODELAY option: errno %d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_dump: TCP_NODELAY option: errno %d\n", ompi_socket_errno);
}
#else
nodelay = 0;
@ -237,8 +242,9 @@ static int mca_ptl_tcp_peer_send_blocking(mca_ptl_base_peer_t* ptl_peer, void* d
while(cnt < size) {
int retval = send(ptl_peer->peer_sd, (const char *)ptr+cnt, size-cnt, 0);
if(retval < 0) {
if(errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
ompi_output(0, "mca_ptl_tcp_peer_send_blocking: send() failed with errno=%d\n",errno);
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EINTR && ompi_socket_errno != EAGAIN && ompi_socket_errno != EWOULDBLOCK) {
ompi_output(0, "mca_ptl_tcp_peer_send_blocking: send() failed with errno=%d\n",ompi_socket_errno);
mca_ptl_tcp_peer_close(ptl_peer);
return -1;
}
@ -383,8 +389,9 @@ static int mca_ptl_tcp_peer_recv_blocking(mca_ptl_base_peer_t* ptl_peer, void* d
/* socket is non-blocking so handle errors */
if(retval < 0) {
if(errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
ompi_output(0, "mca_ptl_tcp_peer_recv_blocking: recv() failed with errno=%d\n",errno);
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno != EINTR && ompi_socket_errno != EAGAIN && ompi_socket_errno != EWOULDBLOCK) {
ompi_output(0, "mca_ptl_tcp_peer_recv_blocking: recv() failed with errno=%d\n",ompi_socket_errno);
mca_ptl_tcp_peer_close(ptl_peer);
return -1;
}
@ -438,7 +445,7 @@ void mca_ptl_tcp_set_socket_options(int sd)
if(setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char *)&optval, sizeof(optval)) < 0) {
ompi_output(0,
"mca_ptl_tcp_set_socket_options: setsockopt(TCP_NODELAY) failed with errno=%d\n",
errno);
ompi_socket_errno);
}
#endif
#if defined(SO_SNDBUF)
@ -446,7 +453,7 @@ void mca_ptl_tcp_set_socket_options(int sd)
setsockopt(sd, SOL_SOCKET, SO_SNDBUF, (char *)&mca_ptl_tcp_component.tcp_sndbuf, sizeof(int)) < 0) {
ompi_output(0,
"mca_ptl_tcp_set_socket_options: SO_SNDBUF option: errno %d\n",
errno);
ompi_socket_errno);
}
#endif
#if defined(SO_RCVBUF)
@ -454,7 +461,7 @@ void mca_ptl_tcp_set_socket_options(int sd)
setsockopt(sd, SOL_SOCKET, SO_RCVBUF, (char *)&mca_ptl_tcp_component.tcp_rcvbuf, sizeof(int)) < 0) {
ompi_output(0,
"mca_ptl_tcp_set_socket_options: SO_RCVBUF option: errno %d\n",
errno);
ompi_socket_errno);
}
#endif
}
@ -488,11 +495,11 @@ static int mca_ptl_tcp_peer_start_connect(mca_ptl_base_peer_t* ptl_peer)
/* setup the socket as non-blocking */
if((flags = fcntl(ptl_peer->peer_sd, F_GETFL, 0)) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_GETFL) failed with errno=%d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_GETFL) failed with errno=%d\n", ompi_socket_errno);
} else {
flags |= O_NONBLOCK;
if(fcntl(ptl_peer->peer_sd, F_SETFL, flags) < 0)
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_SETFL) failed with errno=%d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_connect: fcntl(F_SETFL) failed with errno=%d\n", ompi_socket_errno);
}
/* start the connect - will likely fail with EINPROGRESS */
@ -501,7 +508,8 @@ static int mca_ptl_tcp_peer_start_connect(mca_ptl_base_peer_t* ptl_peer)
peer_addr.sin_port = ptl_peer->peer_addr->addr_port;
if(connect(ptl_peer->peer_sd, (struct sockaddr*)&peer_addr, sizeof(peer_addr)) < 0) {
/* non-blocking so wait for completion */
if(errno == EINPROGRESS) {
IMPORTANT_WINDOWS_COMMENT();
if(ompi_socket_errno == EINPROGRESS || ompi_socket_errno == EWOULDBLOCK) {
ptl_peer->peer_state = MCA_PTL_TCP_CONNECTING;
ompi_event_add(&ptl_peer->peer_send_event, 0);
return OMPI_SUCCESS;
@ -538,11 +546,12 @@ static void mca_ptl_tcp_peer_complete_connect(mca_ptl_base_peer_t* ptl_peer)
/* check connect completion status */
if(getsockopt(ptl_peer->peer_sd, SOL_SOCKET, SO_ERROR, (char *)&so_error, &so_length) < 0) {
ompi_output(0, "mca_ptl_tcp_peer_complete_connect: getsockopt() failed with errno=%d\n", errno);
ompi_output(0, "mca_ptl_tcp_peer_complete_connect: getsockopt() failed with errno=%d\n", ompi_socket_errno);
mca_ptl_tcp_peer_close(ptl_peer);
return;
}
if(so_error == EINPROGRESS) {
IMPORTANT_WINDOWS_COMMENT();
if(so_error == EINPROGRESS || so_error == EWOULDBLOCK) {
ompi_event_add(&ptl_peer->peer_send_event, 0);
return;
}

Просмотреть файл

@ -18,7 +18,7 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <errno.h>
#include "include/ompi_socket_errno.h"
#include "mca/pml/base/pml_base_sendreq.h"
#include "ptl_tcp.h"
#include "ptl_tcp_peer.h"
@ -131,14 +131,14 @@ static bool mca_ptl_tcp_recv_frag_header(mca_ptl_tcp_recv_frag_t* frag, int sd,
return false;
}
if(cnt < 0) {
switch(errno) {
switch(ompi_socket_errno) {
case EINTR:
continue;
case EWOULDBLOCK:
/* ompi_output(0, "mca_ptl_tcp_recv_frag_header: EWOULDBLOCK\n"); */
return false;
default:
ompi_output(0, "mca_ptl_tcp_recv_frag_header: recv() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_recv_frag_header: recv() failed with errno=%d", ompi_socket_errno);
mca_ptl_tcp_peer_close(frag->frag_recv.frag_base.frag_peer);
OMPI_FREE_LIST_RETURN(&mca_ptl_tcp_component.tcp_recv_frags, (ompi_list_item_t*)frag);
return false;
@ -266,13 +266,13 @@ static bool mca_ptl_tcp_recv_frag_data(mca_ptl_tcp_recv_frag_t* frag, int sd)
return false;
}
if(cnt < 0) {
switch(errno) {
switch(ompi_socket_errno) {
case EINTR:
continue;
case EWOULDBLOCK:
return false;
default:
ompi_output(0, "mca_ptl_tcp_recv_frag_data: recv() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_recv_frag_data: recv() failed with errno=%d", ompi_socket_errno);
mca_ptl_tcp_peer_close(frag->frag_recv.frag_base.frag_peer);
OMPI_FREE_LIST_RETURN(&mca_ptl_tcp_component.tcp_recv_frags, (ompi_list_item_t*)frag);
return false;
@ -305,14 +305,14 @@ static bool mca_ptl_tcp_recv_frag_discard(mca_ptl_tcp_recv_frag_t* frag, int sd)
return false;
}
if(cnt < 0) {
switch(errno) {
switch(ompi_socket_errno) {
case EINTR:
continue;
case EWOULDBLOCK:
/* ompi_output(0, "mca_ptl_tcp_recv_frag_discard: EWOULDBLOCK\n"); */
return false;
default:
ompi_output(0, "mca_ptl_tcp_recv_frag_discard: recv() failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_recv_frag_discard: recv() failed with errno=%d", ompi_socket_errno);
mca_ptl_tcp_peer_close(frag->frag_recv.frag_base.frag_peer);
OMPI_FREE_LIST_RETURN(&mca_ptl_tcp_component.tcp_recv_frags, (ompi_list_item_t*)frag);
return false;

Просмотреть файл

@ -18,7 +18,7 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <errno.h>
#include "include/ompi_socket_errno.h"
#include "include/types.h"
#include "datatype/datatype.h"
#include "mca/pml/base/pml_base_sendreq.h"
@ -184,7 +184,7 @@ bool mca_ptl_tcp_send_frag_handler(mca_ptl_tcp_send_frag_t* frag, int sd)
while(cnt < 0) {
cnt = writev(sd, frag->frag_vec_ptr, frag->frag_vec_cnt);
if(cnt < 0) {
switch(errno) {
switch(ompi_socket_errno) {
case EINTR:
continue;
case EWOULDBLOCK:
@ -193,10 +193,10 @@ bool mca_ptl_tcp_send_frag_handler(mca_ptl_tcp_send_frag_t* frag, int sd)
case EFAULT:
ompi_output( 0, "mca_ptl_tcp_send_frag_handler: writev error (%p, %d)\n\t%s(%d)\n",
frag->frag_vec_ptr[0].iov_base, frag->frag_vec_ptr[0].iov_len,
strerror(errno), frag->frag_vec_cnt );
strerror(ompi_socket_errno), frag->frag_vec_cnt );
default:
{
ompi_output(0, "mca_ptl_tcp_send_frag_handler: writev failed with errno=%d", errno);
ompi_output(0, "mca_ptl_tcp_send_frag_handler: writev failed with errno=%d", ompi_socket_errno);
mca_ptl_tcp_peer_close(frag->frag_peer);
return false;
}

Просмотреть файл

@ -18,7 +18,7 @@
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#include <errno.h>
#include "include/ompi_socket_errno.h"
#include "include/types.h"
#include "mca/pml/base/pml_base_sendreq.h"
#include "ptl_tcp.h"

Просмотреть файл

@ -14,7 +14,9 @@
#include "ompi_config.h"
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "communicator/communicator.h"
#include "util/show_help.h"

Просмотреть файл

@ -13,7 +13,9 @@
*/
#include "ompi_config.h"
#ifdef HAVE_SCHED_H
#include <sched.h>
#endif
#include "event/event.h"
#include "mca/pml/pml.h"
#include "mca/io/io.h"
@ -68,7 +70,10 @@ void ompi_progress(void)
* latency equivalent to the time-slice.
*/
if(events == 0) {
#ifndef WIN32
/* TODO: Find the windows equivalent for this */
sched_yield();
#endif
}
#endif
}

Просмотреть файл

@ -43,7 +43,9 @@
*/
int ompi_rte_finalize(void)
{
#ifndef WIN32
ompi_rte_wait_finalize();
#endif
ompi_rte_internal_fini_spawn();
mca_iof_base_close();

Просмотреть файл

@ -18,8 +18,12 @@
#include "ompi_config.h"
#ifdef HAVE_SYS_TYPES_H
#include <sys/types.h>
#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include "include/constants.h"
#include "event/event.h"
@ -161,11 +165,13 @@ int ompi_rte_init(ompi_cmd_line_t *cmd_line, bool *allow_multi_user_threads, boo
printf("show_help: ompi_rte_init failed in ompi_rte_internal_init_spawn\n");
return ret;
}
#ifndef WIN32
if (OMPI_SUCCESS != (ret = ompi_rte_wait_init())) {
/* JMS show_help */
printf("show_help: ompi_rte_init failed in ompi_rte_wait_init\n");
return ret;
}
#endif
/*
@ -278,7 +284,7 @@ int ompi_rte_init(ompi_cmd_line_t *cmd_line, bool *allow_multi_user_threads, boo
ompi_output(0, "mpi_init: error creating unique universe name");
}
}
ompi_process_info.my_universe = strdup(ompi_universe_info.name);
ompi_process_info.seed = true;
if (NULL != ompi_universe_info.ns_replica) {

Просмотреть файл

@ -91,16 +91,20 @@ int ompi_thread_join(ompi_thread_t *t, void **thr_return)
bool ompi_thread_self_compare(ompi_thread_t *t)
{
#error Need Windows thread_self() function
DWORD thread_id;
thread_id = GetCurrentThreadId();
if (thread_id == t->t_handle) {
return true;
}
return false;
}
ompi_thread_t *ompi_thread_get_self(void)
{
ompi_thread_t *t = OBJ_NEW(ompi_thread_t);
#error Need Windows thread_self() function
t->t_handle = ....something....
return NULL;
t->t_handle = GetCurrentThreadId();
return t;
}

Просмотреть файл

@ -74,6 +74,7 @@ static bool already_done = false;
#define DEFAULT_NUMBER_INTERFACES 10
#ifndef WIN32
static int old_ompi_ifinit(void)
{
char buff[1024];
@ -192,7 +193,7 @@ static int old_ompi_ifinit(void)
close(sd);
return OMPI_SUCCESS;
}
#endif
/*
* Discover the list of configured interfaces. Don't care about any

Просмотреть файл

@ -84,7 +84,7 @@ static void ompi_dir_empty(char *pathname);
static bool ompi_is_empty(char *pathname);
#define OMPI_DEFAULT_TMPDIR "/tmp"
#define OMPI_DEFAULT_TMPDIR "C:\\TEMP"
static int ompi_check_dir(bool create, char *directory)

Просмотреть файл

@ -119,6 +119,7 @@
/* Define to 1 if you have the `select' function. */
/* #undef HAVE_SELECT */
#define HAVE_SELECT 1
/* Define to 1 if you have the <signal.h> header file. */
#define HAVE_SIGNAL_H 1
@ -547,6 +548,8 @@
this to be _I32_MAX for now FIXME */
#define OMPI_FORTRAN_HANDLE_MAX _I32_MAX
#define OMPI_WANT_MPI2_ONE_SIDED 1
#include "ompi_config_bottom.h"
#endif /* OMPI_CONFIG_H */

Просмотреть файл

@ -14,9 +14,9 @@
extern const mca_base_component_t mca_ptl_tcp_component;
extern const mca_base_component_t mca_ptl_self_component;
extern const mca_base_component_t mca_ptl_prof_component;
const mca_base_component_t *mca_ptl_base_static_components[] = {
&mca_ptl_self_component,
&mca_ptl_tcp_component,
NULL
};

Просмотреть файл

@ -1,122 +0,0 @@
/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#ifndef OMPI_GET_ERROR_H
#define OMPI_GET_ERROR_H
#include <errno.h>
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
#define EALREADY WSAEALREADY
#define ENOTSOCK WSAENOTSOCK
#define EDESTADDRREQ WSAEDESTADDRREQ
#define EMSGSIZE WSAEMSGSIZE
#define EPROTOTYPE WSAEPROTOTYPE
#define ENOPROTOOPT WSAENOPROTOOPT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EADDRINUSE WSAEADDRINUSE
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
#define ENETDOWN WSAENETDOWN
#define ENETUNREACH WSAENETUNREACH
#define ENETRESET WSAENETRESET
#define ECONNABORTED WSAECONNABORTED
#define ECONNRESET WSAECONNRESET
#define ENOBUFS WSAENOBUFS
#define EISCONN WSAEISCONN
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
/*
* pound define ompi_get_error() to be ompi_errno. so, in windows land
* this simply defaults to being errno
*/
#define ompi_errno ompi_get_errno()
#if defined (cplusplus) || defined (__cplusplus)
extern "C" {
#endif
static __inline int ompi_get_errno(void) {
int ret = WSAGetLastError();
switch (ret) {
case WSAEINTR: ret =EINTR; break;
case WSAEBADF: ret =EBADF; break;
case WSAEACCES: ret =EACCES; break;
case WSAEFAULT: ret =EFAULT; break;
case WSAEINVAL: ret =EINVAL; break;
case WSAEMFILE: ret =EMFILE; break;
case WSAEWOULDBLOCK: ret =EWOULDBLOCK; break;
case WSAEINPROGRESS: ret =EINPROGRESS; break;
case WSAEALREADY: ret =EALREADY; break;
case WSAENOTSOCK: ret =ENOTSOCK; break;
case WSAEDESTADDRREQ: ret =EDESTADDRREQ; break;
case WSAEMSGSIZE: ret =EMSGSIZE; break;
case WSAEPROTOTYPE: ret =EPROTOTYPE; break;
case WSAENOPROTOOPT: ret =ENOPROTOOPT; break;
case WSAEPROTONOSUPPORT: ret =EPROTONOSUPPORT; break;
case WSAESOCKTNOSUPPORT: ret =ESOCKTNOSUPPORT; break;
case WSAEOPNOTSUPP: ret =EOPNOTSUPP; break;
case WSAEPFNOSUPPORT: ret =EPFNOSUPPORT; break;
case WSAEAFNOSUPPORT: ret =EAFNOSUPPORT; break;
case WSAEADDRINUSE: ret =EADDRINUSE; break;
case WSAEADDRNOTAVAIL: ret =EADDRNOTAVAIL; break;
case WSAENETDOWN: ret =ENETDOWN; break;
case WSAENETUNREACH: ret =ENETUNREACH; break;
case WSAENETRESET: ret =ENETRESET; break;
case WSAECONNABORTED: ret =ECONNABORTED; break;
case WSAECONNRESET: ret =ECONNRESET; break;
case WSAENOBUFS: ret =ENOBUFS; break;
case WSAEISCONN: ret =EISCONN; break;
case WSAENOTCONN: ret =ENOTCONN; break;
case WSAESHUTDOWN: ret =ESHUTDOWN; break;
case WSAETOOMANYREFS: ret =ETOOMANYREFS; break;
case WSAETIMEDOUT: ret =ETIMEDOUT; break;
case WSAECONNREFUSED: ret =ECONNREFUSED; break;
case WSAELOOP: ret =ELOOP; break;
case WSAENAMETOOLONG: ret =ENAMETOOLONG; break;
case WSAEHOSTDOWN: ret =EHOSTDOWN; break;
case WSAEHOSTUNREACH: ret =EHOSTUNREACH; break;
case WSAENOTEMPTY: ret =ENOTEMPTY; break;
case WSAEPROCLIM: ret =EPROCLIM; break;
case WSAEUSERS: ret =EUSERS; break;
case WSAEDQUOT: ret =EDQUOT; break;
case WSAESTALE: ret =ESTALE; break;
case WSAEREMOTE: ret =EREMOTE; break;
default: printf("Feature not implemented: %d %s\n", __LINE__, __FILE__);
};
return ret;
}
#if defined(c_plusplus) || defined(__cplusplus)
}
#endif
#endif /* OMPI_GET_ERROR_H */

Просмотреть файл

@ -71,7 +71,7 @@ static __inline int fcntl (int fildes, int cmd, ...) {
int mode;
switch (cmd) {
case F_SETFL: ret = ioctlsocket ((SOCKET)fildes, FIONBIO, (u_long FAR*) &mode);
case F_SETFL: mode = 1; ret = ioctlsocket ((SOCKET)fildes, FIONBIO, (u_long FAR*) &mode);
break;
case F_GETFL: ret = 0;
break;

Просмотреть файл

@ -25,6 +25,11 @@
#undef WIN32_LEAN_AND_MEAN
#endif
/* FD_SETSIZE determines how many sockets windows can select() on. If not defined
before including winsock2.h, it is defined to be 64. We are going to go ahead and
make it 1024 for now. PLEASE CHECK IF THIS IS RIGHT */
#define FD_SETSIZE 1024
/* other utility header files */
#include <cderr.h>
#include <dde.h>
@ -46,7 +51,6 @@
#include "win32/ompi_utsname.h"
#include "win32/ompi_util.h"
#include "win32/ompi_misc.h"
#include "win32/ompi_get_error.h"
#include "util/printf.h"
#define MAXPATHLEN MAX_PATH
@ -54,6 +58,8 @@
typedef unsigned short mode_t;
typedef long ssize_t;
typedef DWORD in_port_t;
typedef int caddr_t;
typedef unsigned int uint;
/* Anju: some random #defines which I know offhand, but need to configure it */
#define OMPI_ALIGNMENT_CXX_BOOL OMPI_ALIGNMENT_INT