|
|
1.1 ! root 1: /* sockwrap.h */ ! 2: ! 3: /* Berkley/WinSock socket API wrappers */ ! 4: ! 5: /* $Id: sockwrap.h,v 1.25 2004/11/03 06:05:49 rswindell Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2004 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This library is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU Lesser General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU Lesser General Public License for more details: lgpl.txt or * ! 18: * http://www.fsf.org/copyleft/lesser.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #ifndef _SOCKWRAP_H ! 39: #define _SOCKWRAP_H ! 40: ! 41: #include "gen_defs.h" /* BOOL */ ! 42: ! 43: /***************/ ! 44: /* OS-specific */ ! 45: /***************/ ! 46: #if defined(_WIN32) /* Use WinSock */ ! 47: ! 48: #include <winsock.h> /* socket/bind/etc. */ ! 49: ! 50: /* Let's agree on a standard WinSock symbol here, people */ ! 51: #ifndef _WINSOCKAPI_ ! 52: #define _WINSOCKAPI_ ! 53: #endif ! 54: ! 55: #elif defined __unix__ /* Unix-variant */ ! 56: ! 57: #include <netdb.h> /* gethostbyname */ ! 58: #include <sys/types.h> /* For u_int32_t on FreeBSD */ ! 59: #include <netinet/in.h> /* IPPROTO_IP */ ! 60: /* define _BSD_SOCKLEN_T_ in order to define socklen_t on darwin */ ! 61: #ifdef __DARWIN__ ! 62: #define _BSD_SOCKLEN_T_ int ! 63: #endif ! 64: #include <sys/socket.h> /* socket/bind/etc. */ ! 65: #include <sys/time.h> /* struct timeval */ ! 66: #include <arpa/inet.h> /* inet_ntoa */ ! 67: #include <netinet/tcp.h> /* TCP_NODELAY */ ! 68: #include <unistd.h> /* close */ ! 69: #if defined(__solaris__) ! 70: #include <sys/filio.h> /* FIONBIO */ ! 71: #define INADDR_NONE -1L ! 72: #else ! 73: #include <sys/ioctl.h> /* FIONBIO */ ! 74: #endif ! 75: ! 76: #endif ! 77: ! 78: #include <errno.h> /* errno */ ! 79: ! 80: /**********************************/ ! 81: /* Socket Implementation-specific */ ! 82: /**********************************/ ! 83: #if defined(_WINSOCKAPI_) ! 84: ! 85: #undef EINTR ! 86: #define EINTR (WSAEINTR-WSABASEERR) ! 87: #undef ENOTSOCK ! 88: #define ENOTSOCK (WSAENOTSOCK-WSABASEERR) ! 89: #undef EMSGSIZE ! 90: #define EMSGSIZE (WSAEMSGSIZE-WSABASEERR) ! 91: #undef EWOULDBLOCK ! 92: #define EWOULDBLOCK (WSAEWOULDBLOCK-WSABASEERR) ! 93: ! 94: #define EPROTOTYPE (WSAEPROTOTYPE-WSABASEERR) ! 95: #define ENOPROTOOPT (WSAENOPROTOOPT-WSABASEERR) ! 96: #define EPROTONOSUPPORT (WSAEPROTONOSUPPORT-WSABASEERR) ! 97: #define ESOCKTNOSUPPORT (WSAESOCKTNOSUPPORT-WSABASEERR) ! 98: #define EOPNOTSUPP (WSAEOPNOTSUPP-WSABASEERR) ! 99: #define EPFNOSUPPORT (WSAEPFNOSUPPORT-WSABASEERR) ! 100: #define EAFNOSUPPORT (WSAEAFNOSUPPORT-WSABASEERR) ! 101: ! 102: #undef EADDRINUSE ! 103: #define EADDRINUSE (WSAEADDRINUSE-WSABASEERR) ! 104: #undef EADDRNOTAVAIL ! 105: #define EADDRNOTAVAIL (WSAEADDRNOTAVAIL-WSABASEERR) ! 106: #undef ECONNABORTED ! 107: #define ECONNABORTED (WSAECONNABORTED-WSABASEERR) ! 108: #undef ECONNRESET ! 109: #define ECONNRESET (WSAECONNRESET-WSABASEERR) ! 110: #undef ENOBUFS ! 111: #define ENOBUFS (WSAENOBUFS-WSABASEERR) ! 112: #undef EISCONN ! 113: #define EISCONN (WSAEISCONN-WSABASEERR) ! 114: #undef ENOTCONN ! 115: #define ENOTCONN (WSAENOTCONN-WSABASEERR) ! 116: #undef ESHUTDOWN ! 117: #define ESHUTDOWN (WSAESHUTDOWN-WSABASEERR) ! 118: #undef ETIMEDOUT ! 119: #define ETIMEDOUT (WSAETIMEDOUT-WSABASEERR) ! 120: #undef ECONNREFUSED ! 121: #define ECONNREFUSED (WSAECONNREFUSED-WSABASEERR) ! 122: #undef EINPROGRESS ! 123: #define EINPROGRESS (WSAEINPROGRESS-WSABASEERR) ! 124: ! 125: #define s_addr S_un.S_addr ! 126: ! 127: #define socklen_t int ! 128: ! 129: static wsa_error; ! 130: #define ERROR_VALUE ((wsa_error=WSAGetLastError())>0 ? wsa_error-WSABASEERR : wsa_error) ! 131: #define sendsocket(s,b,l) send(s,b,l,0) ! 132: ! 133: #else /* BSD sockets */ ! 134: ! 135: /* WinSock-isms */ ! 136: #define HOSTENT struct hostent ! 137: #define IN_ADDR struct in_addr ! 138: #define SOCKADDR struct sockaddr ! 139: #define SOCKADDR_IN struct sockaddr_in ! 140: #define LINGER struct linger ! 141: #define SOCKET int ! 142: #define SOCKET_ERROR -1 ! 143: #define INVALID_SOCKET (SOCKET)(~0) ! 144: #define closesocket close ! 145: #define ioctlsocket ioctl ! 146: #define ERROR_VALUE errno ! 147: #define sendsocket write /* FreeBSD send() is broken */ ! 148: ! 149: #endif /* __unix__ */ ! 150: ! 151: #ifdef __cplusplus ! 152: extern "C" { ! 153: #endif ! 154: ! 155: int sendfilesocket(int sock, int file, long *offset, long count); ! 156: int recvfilesocket(int sock, int file, long *offset, long count); ! 157: BOOL socket_check(SOCKET sock, BOOL* rd_p, BOOL* wr_p, DWORD timeout); ! 158: int retry_bind(SOCKET s, const struct sockaddr *addr, socklen_t addrlen ! 159: ,uint retries, uint wait_secs, const char* prot ! 160: ,int (*lprintf)(int level, char *fmt, ...)); ! 161: ! 162: #ifdef __cplusplus ! 163: } ! 164: #endif ! 165: ! 166: #ifndef SHUT_RDWR ! 167: #define SHUT_RDWR 2 /* for shutdown() */ ! 168: #endif ! 169: ! 170: #ifndef IPPORT_HTTP ! 171: #define IPPORT_HTTP 80 ! 172: #endif ! 173: #ifndef IPPORT_FTP ! 174: #define IPPORT_FTP 21 ! 175: #endif ! 176: #ifndef IPPORT_TELNET ! 177: #define IPPORT_TELNET 23 ! 178: #endif ! 179: #ifndef IPPORT_SMTP ! 180: #define IPPORT_SMTP 25 ! 181: #endif ! 182: #ifndef IPPORT_POP3 ! 183: #define IPPORT_POP3 110 ! 184: #endif ! 185: ! 186: #endif /* Don't add anything after this line */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.