Fri May 31 16:21:54 CEST 2002 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / io-layer / sockets.h
1 /*
2  * sockets.h:  Socket handles
3  *
4  * Author:
5  *      Dick Porter (dick@ximian.com)
6  *
7  * (C) 2002 Ximian, Inc.
8  */
9
10 #ifndef _WAPI_SOCKETS_H_
11 #define _WAPI_SOCKETS_H_
12
13 #include <config.h>
14 #include <sys/types.h>
15 #include <sys/socket.h>
16 #include <sys/ioctl.h>
17 #include <netinet/in.h>
18 #include <netinet/tcp.h>
19 #include <netdb.h>
20 #include <arpa/inet.h>
21
22 #ifdef HAVE_SYS_FILIO_H
23 #include <sys/filio.h>     /* defines FIONBIO and FIONREAD */
24 #endif
25 #ifdef HAVE_SYS_SOCKIO_H
26 #include <sys/sockio.h>    /* defines SIOCATMARK */
27 #endif
28
29 #include "mono/io-layer/wapi.h"
30
31 #define WSADESCRIPTION_LEN 256
32 #define WSASYS_STATUS_LEN 128
33
34 typedef struct 
35 {
36         guint16 wVersion;
37         guint16 wHighVersion;
38         char szDescription[WSADESCRIPTION_LEN+1];
39         char szSystemStatus[WSASYS_STATUS_LEN+1];
40         guint16 iMaxSockets;
41         guint16 iMaxUdpDg;
42         guchar *lpVendorInfo;
43 } WapiWSAData;
44
45 #define INVALID_SOCKET (guint32)(~0)
46 #define SOCKET_ERROR -1
47
48 extern int WSAStartup(guint32 requested, WapiWSAData *data);
49 extern int WSACleanup(void);
50 extern void WSASetLastError(int error);
51 extern int WSAGetLastError(void);
52 extern int closesocket(guint32 handle);
53
54 #ifndef _WAPI_BUILDING
55 #define accept _wapi_accept
56 #define bind _wapi_bind
57 #define connect _wapi_connect
58 #define getpeername _wapi_getpeername
59 #define getsockname _wapi_getsockname
60 #define getsockopt _wapi_getsockopt
61 #define listen _wapi_listen
62 #define recv _wapi_recv
63 #define recvfrom _wapi_recvfrom
64 #define send _wapi_send
65 #define sendto _wapi_sendto
66 #define setsockopt _wapi_setsockopt
67 #define shutdown _wapi_shutdown
68 #define socket _wapi_socket
69 #define gethostbyname _wapi_gethostbyname
70 #define select _wapi_select
71
72 #ifdef FD_CLR
73 #undef FD_CLR
74 #endif
75
76 #ifdef FD_ISSET
77 #undef FD_ISSET
78 #endif
79
80 #ifdef FD_SET
81 #undef FD_SET
82 #endif
83
84 /* No need to wrap FD_ZERO because it doesnt involve file
85  * descriptors
86 */
87 #define FD_CLR _wapi_FD_CLR
88 #define FD_ISSET _wapi_FD_ISSET
89 #define FD_SET _wapi_FD_SET
90
91 #endif /* _WAPI_BUILDING */
92
93 extern guint32 _wapi_accept(guint32 handle, struct sockaddr *addr,
94                             socklen_t *addrlen);
95 extern int _wapi_bind(guint32 handle, struct sockaddr *my_addr,
96                       socklen_t addrlen);
97 extern int _wapi_connect(guint32 handle, const struct sockaddr *serv_addr,
98                          socklen_t addrlen);
99 extern int _wapi_getpeername(guint32 handle, struct sockaddr *name,
100                              socklen_t *namelen);
101 extern int _wapi_getsockname(guint32 handle, struct sockaddr *name,
102                              socklen_t *namelen);
103 extern int _wapi_getsockopt(guint32 handle, int level, int optname,
104                             void *optval, socklen_t *optlen);
105 extern int _wapi_listen(guint32 handle, int backlog);
106 extern int _wapi_recv(guint32 handle, void *buf, size_t len, int recv_flags);
107 extern int _wapi_recvfrom(guint32 handle, void *buf, size_t len,
108                           int recv_flags, struct sockaddr *from,
109                           socklen_t *fromlen);
110 extern int _wapi_send(guint32 handle, const void *msg, size_t len,
111                       int send_flags);
112 extern int _wapi_sendto(guint32 handle, const void *msg, size_t len,
113                         int send_flags, const struct sockaddr *to,
114                         socklen_t tolen);
115 extern int _wapi_setsockopt(guint32 handle, int level, int optname,
116                             const void *optval, socklen_t optlen);
117 extern int _wapi_shutdown(guint32 handle, int how);
118 extern guint32 _wapi_socket(int domain, int type, int protocol);;
119 extern struct hostent *_wapi_gethostbyname(const char *hostname);
120 extern int _wapi_select(int nfds, fd_set *readfds, fd_set *writefds,
121                         fd_set *exceptfds, struct timeval *timeout);
122 extern void _wapi_FD_CLR(guint32 handle, fd_set *set);
123 extern int _wapi_FD_ISSET(guint32 handle, fd_set *set);
124 extern void _wapi_FD_SET(guint32 handle, fd_set *set);
125
126 extern int ioctlsocket(guint32 handle, gint32 command, gpointer arg);
127
128 #endif /* _WAPI_SOCKETS_H_ */