[debugger] Ports from dotnet/runtime to maintain compatibility (#21653)
[mono-project.git] / mono / metadata / w32socket-internals.h
blob6e4785db5d6a5f8894db0783a5962897be673794
1 /**
2 * \file
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__
10 #include <config.h>
11 #include <glib.h>
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
20 #include <mono/utils/w32api.h>
22 #ifndef HAVE_SOCKLEN_T
23 #define socklen_t int
24 #endif
26 #include <mono/utils/w32subset.h>
28 #if defined(HOST_WIN32) && (HAVE_API_SUPPORT_WIN32_TRANSMIT_FILE || HAVE_API_SUPPORT_WIN32_DISCONNECT_EX)
29 #include <mswsock.h>
30 #else
31 typedef struct {
32 gpointer Head;
33 guint32 HeadLength;
34 gpointer Tail;
35 guint32 TailLength;
36 } TRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS;
37 #endif
39 #ifndef HOST_WIN32
40 #define TF_DISCONNECT 0x01
41 #define TF_REUSE_SOCKET 0x02
43 typedef struct {
44 guint32 Data1;
45 guint16 Data2;
46 guint16 Data3;
47 guint8 Data4[8];
48 } GUID;
50 typedef struct {
51 guint32 Internal;
52 guint32 InternalHigh;
53 guint32 Offset;
54 guint32 OffsetHigh;
55 gpointer hEvent;
56 gpointer handle1;
57 gpointer handle2;
58 } OVERLAPPED;
59 #endif
61 void
62 mono_w32socket_initialize (void);
64 void
65 mono_w32socket_cleanup (void);
67 SOCKET
68 mono_w32socket_accept (SOCKET s, struct sockaddr *addr, socklen_t *addrlen, gboolean blocking);
70 int
71 mono_w32socket_connect (SOCKET s, const struct sockaddr *name, socklen_t namelen, gboolean blocking);
73 int
74 mono_w32socket_recv (SOCKET s, char *buf, int len, int flags, gboolean blocking);
76 int
77 mono_w32socket_recvfrom (SOCKET s, char *buf, int len, int flags, struct sockaddr *from, socklen_t *fromlen, gboolean blocking);
79 int
80 mono_w32socket_recvbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 *lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);
82 int
83 mono_w32socket_send (SOCKET s, void *buf, int len, int flags, gboolean blocking);
85 int
86 mono_w32socket_sendto (SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen, gboolean blocking);
88 int
89 mono_w32socket_sendbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking);
91 BOOL
92 mono_w32socket_transmit_file (SOCKET hSocket, gpointer hFile, gpointer lpTransmitBuffers, guint32 dwReserved, gboolean blocking);
95 #ifndef HOST_WIN32
97 SOCKET
98 mono_w32socket_socket (int domain, int type, int protocol);
100 gint
101 mono_w32socket_bind (SOCKET sock, struct sockaddr *addr, socklen_t addrlen);
103 gint
104 mono_w32socket_getpeername (SOCKET sock, struct sockaddr *name, socklen_t *namelen);
106 gint
107 mono_w32socket_getsockname (SOCKET sock, struct sockaddr *name, socklen_t *namelen);
109 gint
110 mono_w32socket_getsockopt (SOCKET sock, gint level, gint optname, gpointer optval, socklen_t *optlen);
112 gint
113 mono_w32socket_setsockopt (SOCKET sock, gint level, gint optname, gconstpointer optval, socklen_t optlen);
115 gint
116 mono_w32socket_listen (SOCKET sock, gint backlog);
118 gint
119 mono_w32socket_shutdown (SOCKET sock, gint how);
121 gint
122 mono_w32socket_ioctl (SOCKET sock, gint32 command, gchar *input, gint inputlen, gchar *output, gint outputlen, glong *written);
124 gboolean
125 mono_w32socket_close (SOCKET sock);
127 #endif /* HOST_WIN32 */
129 gint
130 mono_w32socket_disconnect (SOCKET sock, gboolean reuse);
132 gint
133 mono_w32socket_set_blocking (SOCKET socket, gboolean blocking);
135 gint
136 mono_w32socket_get_available (SOCKET socket, guint64 *amount);
138 void
139 mono_w32socket_set_last_error (gint32 error);
141 gint32
142 mono_w32socket_get_last_error (void);
144 gint32
145 mono_w32socket_convert_error (gint error);
147 gboolean
148 mono_w32socket_duplicate (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle);
150 #endif // __MONO_METADATA_W32SOCKET_INTERNALS_H__