1 /* -*- Mode: C; c-basic-offset:4 ; -*- */ 2 /* 3 * (C) 2001 by Argonne National Laboratory. 4 * See COPYRIGHT in top-level directory. 5 */ 6 #ifndef BSOCKET_H_INCLUDED 7 #define BSOCKET_H_INCLUDED 8 9 #ifdef __cplusplus 10 extern "C" { 11 #endif 12 13 #include "mpidi_ch3_conf.h" 14 #include "mpichconf.h" 15 16 /* sockaddr_in (Internet) */ 17 #ifdef HAVE_NETINET_IN_H 18 #include <netinet/in.h> 19 #endif 20 #ifdef HAVE_WINSOCK2_H 21 #include <winsock2.h> 22 #include <windows.h> 23 #endif 24 #ifdef HAVE_SYS_SOCKET_H 25 #include <sys/socket.h> 26 #endif 27 #ifdef HAVE_SYS_SELECT_H 28 #include <sys/select.h> 29 #endif 30 #ifdef HAVE_NETINET_TCP_H 31 #include <netinet/tcp.h> 32 #endif 33 34 #ifndef SOCKET_ERROR 35 #define SOCKET_ERROR -1 36 #endif 37 38 #ifndef ADDR_ANY 39 #define ADDR_ANY 0 40 #endif 41 #ifndef INADDR_ANY 42 #define INADDR_ANY 0 43 #endif 44 45 #ifdef HAVE_WINDOWS_SOCKET 46 #define bfd_close closesocket 47 #define bfd_read(a,b,c) recv(a,b,c,0) 48 #define bfd_write(a,b,c) send(a,b,c,0) 49 #else 50 #define bfd_close close 51 #define bfd_read(a,b,c) read(a,b,c) 52 #define bfd_write(a,b,c) write(a,b,c) 53 #endif 54 55 #ifdef HAVE_WINSOCK2_H 56 #ifndef socklen_t 57 typedef int socklen_t; 58 #endif 59 #else 60 #ifndef socklen_t 61 #define socklen_t int 62 #endif 63 #endif 64 65 #ifdef HAVE_WINSOCK2_H 66 #define B_VECTOR WSABUF 67 #define B_VECTOR_LEN len 68 #define B_VECTOR_BUF buf 69 #else 70 #ifdef HAVE_SYS_UIO_H 71 #include <sys/uio.h> 72 #endif 73 #define B_VECTOR struct iovec 74 #define B_VECTOR_LEN iov_len 75 #define B_VECTOR_BUF iov_base 76 #endif 77 #define B_VECTOR_LIMIT 16 78 79 #define BFD_INVALID_SOCKET -1 80 81 /* This was ifdef NO_BSOCKETS but should have been USE_BSOCKETS */ 82 #ifndef USE_BSOCKETS 83 84 #define bfd_set fd_set 85 #define BFD_CLR(bfd, s) FD_CLR((unsigned int)bfd,s) 86 #define BFD_ZERO(s) FD_ZERO(s) 87 #define BFD_SET(bfd, s) FD_SET((unsigned int)bfd,s) 88 #define BFD_ISSET(bfd, s) FD_ISSET((unsigned int)bfd,s) 89 90 #define BFD_MAX(a,b) (((a) > (b)) ? (a) : (b)) 91 92 #define bcopyset(dest, src) *(dest) = *(src) 93 #define bget_fd(bfd) bfd 94 #define bclr(bfd, s) FD_CLR( (unsigned int)bfd, s ) 95 #define bset(bfd, s) FD_SET( (unsigned int)bfd, s ) 96 #define bsocket(family, type, protocol) socket(family, type, protocol) 97 #define bbind(bfd, servaddr, servaddr_len) bind(bfd, servaddr, servaddr_len) 98 #define blisten(bfd, backlog) listen(bfd, backlog) 99 #define bsetsockopt(bfd, level, optname, optval, optlen) setsockopt(bfd, level, optname, optval, optlen) 100 #define baccept(bfd, cliaddr, clilen) accept(bfd, cliaddr, clilen) 101 #define bconnect(bfd, servaddr, servaddr_len) connect(bfd, servaddr, servaddr_len) 102 #define bselect(maxfds, readbfds, writebfds, execbfds, tv) select(maxfds, readbfds, writebfds, execbfds, tv) 103 #define bwrite(bfd, ubuf, len) bfd_write(bfd, ubuf, len) 104 #define bread(bfd, ubuf, len) bfd_read(bfd, ubuf, len) 105 #define bclose(bfd) bfd_close(bfd) 106 #define bgetsockname(bfd, name, namelen) getsockname(bfd, name, namelen) 107 108 #else /* #ifndef USE_BSOCKETS */ 109 110 typedef struct BFD_Buffer_struct BFD_Buffer; 111 typedef struct bfd_set 112 { 113 fd_set set; 114 int n; 115 BFD_Buffer *p[FD_SETSIZE]; 116 } bfd_set; 117 /*#define BFD_CLR(bfd, s) FD_CLR( bget_fd(bfd), & (s) -> set )*/ 118 #define BFD_CLR(bfd, s) bclr( bfd, s ) 119 #define BFD_ZERO(s) { FD_ZERO(& (s) -> set); (s) -> n = 0; } 120 #define BFD_SET(bfd, s) bset( bfd , s ) 121 #define BFD_ISSET(bfd, s) FD_ISSET( bget_fd(bfd), & (s) -> set ) 122 /* 123 #define bfd_set fd_set 124 #define BFD_CLR(bfd, set) FD_CLR( bget_fd(bfd), set ) 125 #define BFD_ZERO(set) FD_ZERO(set) 126 #define BFD_SET(bfd, set) FD_SET( bget_fd(bfd), set ) 127 #define BFD_ISSET(bfd, set) FD_ISSET( bget_fd(bfd), set ) 128 */ 129 130 #define BFD_MAX(a,b) (((bget_fd(a)) > (bget_fd(b))) ? (a) : (b)) 131 132 /* bsockets.c */ 133 void bcopyset(bfd_set *dest, bfd_set *src); 134 unsigned int bget_fd(int bfd); 135 void bset(int bfd, bfd_set *s); 136 void bclr(int bfd, bfd_set *s); 137 int bsocket_init( void ); 138 int bsocket_finalize( void ); 139 int bsocket( int, int, int ); 140 int bbind( int, const struct sockaddr *, socklen_t ); 141 int blisten( int, int ); 142 int bsetsockopt( int, int, int, const void *, socklen_t ); 143 int baccept( int, struct sockaddr *, socklen_t * ); 144 int bconnect( int, const struct sockaddr *, socklen_t ); 145 int bread( int, char *, int ); 146 int breadwrite( int, int, char *, int, int *, int * ); 147 int breadvwrite( int, int, B_VECTOR *, int, int *, int * ); 148 int bwrite( int, char *, int ); 149 int bclose( int ); 150 int bclose_all( void ); 151 int bgetsockname(int bfd, struct sockaddr *name, int *namelen ); 152 int bselect( int maxfds, bfd_set *readbfds, bfd_set *writebfds, bfd_set *execbfds, struct timeval *tv ); 153 154 #endif /* #else #ifndef USE_BSOCKETS */ 155 156 int bsocket_init( void ); 157 int bsocket_finalize( void ); 158 int breadv( int, B_VECTOR *, int ); 159 int bwritev( int, B_VECTOR *, int ); 160 int bmake_nonblocking( int ); 161 int bmake_blocking( int ); 162 163 int beasy_create(int *bfd, int port, unsigned long addr); 164 int beasy_connect(int bfd, char *host, int port); 165 int beasy_connect_timeout(int bfd, char *host, int port, int seconds); 166 int beasy_accept(int bfd); 167 int beasy_closesocket(int bfd); 168 int beasy_get_sock_info(int bfd, char *name, int *port); 169 int beasy_get_ip_string(char *ipstring); 170 int beasy_get_ip(unsigned long *ip); 171 int beasy_receive(int bfd, char *buffer, int len); 172 int beasy_receive_timeout(int bfd, char *buffer, int len, int timeout); 173 int beasy_receive_some(int bfd, char *buffer, int len); 174 int beasy_send(int bfd, char *buffer, int length); 175 int beasy_getlasterror(void); 176 int beasy_error_to_string(int error, char *str, int length); 177 178 #ifdef __cplusplus 179 } 180 #endif 181 182 #endif 183