1/* Copyright (C) 1995, 2001, 2002, 2003, 2004, 2005, 2 2006, 2007 Free Software Foundation, Inc. 3 4This file is part of GNU Emacs. 5 6GNU Emacs is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 2, or (at your option) 9any later version. 10 11GNU Emacs is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16You should have received a copy of the GNU General Public License 17along with GNU Emacs; see the file COPYING. If not, write to 18the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 19Boston, MA 02110-1301, USA. */ 20 21 22/* Workable version of <sys/socket.h> based on winsock.h */ 23 24#ifndef _SOCKET_H_ 25#define _SOCKET_H_ 26 27/* defeat the multiple include protection */ 28#ifdef _WINSOCKAPI_ 29#undef _WINSOCKAPI_ 30#endif 31#ifdef _WINSOCK_H 32#undef _WINSOCK_H 33#endif 34 35/* avoid confusion with our version of select */ 36#ifdef select 37#undef select 38#define MUST_REDEF_SELECT 39#endif 40 41/* avoid clashing with our version of FD_SET if already defined */ 42#ifdef FD_SET 43#undef FD_SET 44#undef FD_CLR 45#undef FD_ISSET 46#undef FD_ZERO 47#endif 48 49/* avoid duplicate definition of timeval */ 50#ifdef HAVE_TIMEVAL 51#define timeval ws_timeval 52#endif 53 54#include <winsock.h> 55 56/* redefine select to reference our version */ 57#ifdef MUST_REDEF_SELECT 58#define select sys_select 59#undef MUST_REDEF_SELECT 60#endif 61 62/* revert to our version of FD_SET */ 63#undef FD_SET 64#undef FD_CLR 65#undef FD_ISSET 66#undef FD_ZERO 67 68/* allow us to provide our own version of fd_set */ 69#define fd_set ws_fd_set 70#include "w32.h" 71 72#ifdef HAVE_TIMEVAL 73#undef timeval 74#endif 75 76/* shadow functions where we provide our own wrapper */ 77#define socket sys_socket 78#define bind sys_bind 79#define connect sys_connect 80#define htons sys_htons 81#define ntohs sys_ntohs 82#define inet_addr sys_inet_addr 83#define gethostname sys_gethostname 84#define gethostbyname sys_gethostbyname 85#define getpeername sys_getpeername 86#define getservbyname sys_getservbyname 87#define shutdown sys_shutdown 88#define setsockopt sys_setsockopt 89#define listen sys_listen 90#define getsockname sys_getsockname 91#define accept sys_accept 92#define recvfrom sys_recvfrom 93#define sendto sys_sendto 94 95int sys_socket(int af, int type, int protocol); 96int sys_bind (int s, const struct sockaddr *addr, int namelen); 97int sys_connect (int s, const struct sockaddr *addr, int namelen); 98u_short sys_htons (u_short hostshort); 99u_short sys_ntohs (u_short netshort); 100unsigned long sys_inet_addr (const char * cp); 101int sys_gethostname (char * name, int namelen); 102struct hostent * sys_gethostbyname (const char * name); 103struct servent * sys_getservbyname (const char * name, const char * proto); 104int sys_getpeername (int s, struct sockaddr *addr, int * namelen); 105int sys_shutdown (int socket, int how); 106int sys_setsockopt (int s, int level, int oname, const void * oval, int olen); 107int sys_listen (int s, int backlog); 108int sys_getsockname (int s, struct sockaddr * name, int * namelen); 109int sys_accept (int s, struct sockaddr *addr, int *addrlen); 110int sys_recvfrom (int s, char *buf, int len, int flags, 111 struct sockaddr *from, int * fromlen); 112int sys_sendto (int s, const char * buf, int len, int flags, 113 const struct sockaddr *to, int tolen); 114 115/* In addition to wrappers for the winsock functions, we also provide 116 an fcntl function, for setting sockets to non-blocking mode. */ 117int fcntl (int s, int cmd, int options); 118#define F_SETFL 4 119#define O_NDELAY 04000 120 121/* we are providing a real h_errno variable */ 122#undef h_errno 123extern int h_errno; 124 125/* map winsock error codes to standard names */ 126#define EWOULDBLOCK WSAEWOULDBLOCK 127#define EINPROGRESS WSAEINPROGRESS 128#define EALREADY WSAEALREADY 129#define ENOTSOCK WSAENOTSOCK 130#define EDESTADDRREQ WSAEDESTADDRREQ 131#define EMSGSIZE WSAEMSGSIZE 132#define EPROTOTYPE WSAEPROTOTYPE 133#define ENOPROTOOPT WSAENOPROTOOPT 134#define EPROTONOSUPPORT WSAEPROTONOSUPPORT 135#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT 136#define EOPNOTSUPP WSAEOPNOTSUPP 137#define EPFNOSUPPORT WSAEPFNOSUPPORT 138#define EAFNOSUPPORT WSAEAFNOSUPPORT 139#define EADDRINUSE WSAEADDRINUSE 140#define EADDRNOTAVAIL WSAEADDRNOTAVAIL 141#define ENETDOWN WSAENETDOWN 142#define ENETUNREACH WSAENETUNREACH 143#define ENETRESET WSAENETRESET 144#define ECONNABORTED WSAECONNABORTED 145#define ECONNRESET WSAECONNRESET 146#define ENOBUFS WSAENOBUFS 147#define EISCONN WSAEISCONN 148#define ENOTCONN WSAENOTCONN 149#define ESHUTDOWN WSAESHUTDOWN 150#define ETOOMANYREFS WSAETOOMANYREFS 151#define ETIMEDOUT WSAETIMEDOUT 152#define ECONNREFUSED WSAECONNREFUSED 153#define ELOOP WSAELOOP 154/* #define ENAMETOOLONG WSAENAMETOOLONG */ 155#define EHOSTDOWN WSAEHOSTDOWN 156#define EHOSTUNREACH WSAEHOSTUNREACH 157/* #define ENOTEMPTY WSAENOTEMPTY */ 158#define EPROCLIM WSAEPROCLIM 159#define EUSERS WSAEUSERS 160#define EDQUOT WSAEDQUOT 161#define ESTALE WSAESTALE 162#define EREMOTE WSAEREMOTE 163 164#endif /* _SOCKET_H_ */ 165 166/* end of socket.h */ 167 168/* arch-tag: e3b8b91c-aaa0-4bc4-be57-a85a1dd247b4 169 (do not change this comment) */ 170