These are the changes after the review with Jeff. Mostly are fixes for OOB and TCP
This commit was SVN r4070.
Этот коммит содержится в:
родитель
b922a56938
Коммит
9ac9f15537
@ -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
Обычный файл
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
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user