[io-layer] Extract socket (#4241)
[mono.git] / mono / metadata / w32socket-internals.h
1 /*
2 * w32socket-internals.h
3 *
4 * Copyright 2016 Microsoft
5 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
6 */
7 #ifndef __MONO_METADATA_W32SOCKET_INTERNALS_H__
8 #define __MONO_METADATA_W32SOCKET_INTERNALS_H__
9
10 #include <config.h>
11 #include <glib.h>
12
13 #ifdef HAVE_SYS_TIME_H
14 #include <sys/time.h>
15 #endif
16 #ifdef HAVE_SYS_SOCKET_H
17 #include <sys/socket.h>
18 #endif
19
20 #include <mono/io-layer/io-layer.h>
21
22 #ifndef HAVE_SOCKLEN_T
23 #define socklen_t int
24 #endif
25
26 #ifndef HOST_WIN32
27
28 #define TF_DISCONNECT 0x01
29 #define TF_REUSE_SOCKET 0x02
30
31 typedef struct {
32         guint32 len;
33         gpointer buf;
34 } WSABUF;
35
36 typedef struct {
37         guint32 Internal;
38         guint32 InternalHigh;
39         guint32 Offset;
40         guint32 OffsetHigh;
41         gpointer hEvent;
42         gpointer handle1;
43         gpointer handle2;
44 } OVERLAPPED;
45
46 typedef struct {
47         gpointer Head;
48         guint32 HeadLength;
49         gpointer Tail;
50         guint32 TailLength;
51 } TRANSMIT_FILE_BUFFERS;
52
53 typedef struct {
54         guint32 Data1;
55         guint16 Data2;
56         guint16 Data3;
57         guint8 Data4[8];
58 } GUID;
59
60 typedef BOOL (WINAPI *LPFN_DISCONNECTEX)(SOCKET, OVERLAPPED*, guint32, guint32);
61 typedef BOOL (WINAPI *LPFN_TRANSMITFILE)(SOCKET, HANDLE, guint32, guint32, OVERLAPPED*, TRANSMIT_FILE_BUFFERS*, guint32);
62
63 #endif
64
65 void
66 mono_w32socket_initialize (void);
67
68 void
69 mono_w32socket_cleanup (void);
70
71 SOCKET
72 mono_w32socket_accept (SOCKET s, struct sockaddr *addr, socklen_t *addrlen, gboolean blocking);
73
74 int
75 mono_w32socket_connect (SOCKET s, const struct sockaddr *name, int namelen, gboolean blocking);
76
77 int
78 mono_w32socket_recv (SOCKET s, char *buf, int len, int flags, gboolean blocking);
79
80 int
81 mono_w32socket_recvfrom (SOCKET s, char *buf, int len, int flags, struct sockaddr *from, socklen_t *fromlen, gboolean blocking);
82
83 int
84 mono_w32socket_recvbuffers (SOCKET s, WSABUF *lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 *lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);
85
86 int
87 mono_w32socket_send (SOCKET s, char *buf, int len, int flags, gboolean blocking);
88
89 int
90 mono_w32socket_sendto (SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen, gboolean blocking);
91
92 int
93 mono_w32socket_sendbuffers (SOCKET s, WSABUF *lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);
94
95 #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT)
96
97 BOOL
98 mono_w32socket_transmit_file (SOCKET hSocket, gpointer hFile, TRANSMIT_FILE_BUFFERS *lpTransmitBuffers, guint32 dwReserved, gboolean blocking);
99
100 #endif
101
102 #ifndef HOST_WIN32
103
104 SOCKET
105 mono_w32socket_socket (int domain, int type, int protocol);
106
107 gint
108 mono_w32socket_bind (SOCKET sock, struct sockaddr *addr, socklen_t addrlen);
109
110 gint
111 mono_w32socket_getpeername (SOCKET sock, struct sockaddr *name, socklen_t *namelen);
112
113 gint
114 mono_w32socket_getsockname (SOCKET sock, struct sockaddr *name, socklen_t *namelen);
115
116 gint
117 mono_w32socket_getsockopt (SOCKET sock, gint level, gint optname, gpointer optval, socklen_t *optlen);
118
119 gint
120 mono_w32socket_setsockopt (SOCKET sock, gint level, gint optname, const gpointer optval, socklen_t optlen);
121
122 gint
123 mono_w32socket_listen (SOCKET sock, gint backlog);
124
125 gint
126 mono_w32socket_shutdown (SOCKET sock, gint how);
127
128 gint
129 mono_w32socket_ioctl (SOCKET sock, gint32 command, gchar *input, gint inputlen, gchar *output, gint outputlen, glong *written);
130
131 #endif /* HOST_WIN32 */
132
133 gint
134 mono_w32socket_disconnect (SOCKET sock, gboolean reuse);
135
136 gint
137 mono_w32socket_set_blocking (SOCKET socket, gboolean blocking);
138
139 gint
140 mono_w32socket_get_available (SOCKET socket, guint64 *amount);
141
142 void
143 mono_w32socket_set_last_error (gint32 error);
144
145 gint32
146 mono_w32socket_get_last_error (void);
147
148 gint32
149 mono_w32socket_convert_error (gint error);
150
151 #endif // __MONO_METADATA_W32SOCKET_INTERNALS_H__