3 * System.Net.Sockets.Socket support
6 * Dick Porter (dick@ximian.com)
8 * (C) 2001 Ximian, Inc.
11 #ifndef _MONO_METADATA_W32SOCKET_H_
12 #define _MONO_METADATA_W32SOCKET_H_
17 #include <mono/metadata/object-internals.h>
20 #define INVALID_SOCKET ((SOCKET)(guint32)(~0))
21 #define SOCKET_ERROR (-1)
31 /* This is a copy of System.Net.Sockets.SocketType */
37 SocketType_Seqpacket=5,
41 /* This is a copy of System.Net.Sockets.AddressFamily */
43 AddressFamily_Unknown=-1,
44 AddressFamily_Unspecified=0,
46 AddressFamily_InterNetwork=2,
47 AddressFamily_ImpLink=3,
49 AddressFamily_Chaos=5,
55 AddressFamily_DataKit=9,
56 AddressFamily_Ccitt=10,
58 AddressFamily_DecNet=12,
59 AddressFamily_DataLink=13,
61 AddressFamily_HyperChannel=15,
62 AddressFamily_AppleTalk=16,
63 AddressFamily_NetBios=17,
64 AddressFamily_VoiceView=18,
65 AddressFamily_FireFox=19,
66 AddressFamily_Banyan=21,
68 AddressFamily_InterNetworkV6=23,
69 AddressFamily_Cluster=24,
70 AddressFamily_Ieee12844=25,
71 AddressFamily_Irda=26,
72 AddressFamily_NetworkDesigners=28
75 /* This is a copy of System.Net.Sockets.ProtocolType */
88 ProtocolType_Unspecified=0,
89 ProtocolType_Ipx=1000,
90 ProtocolType_Spx=1256,
91 ProtocolType_SpxII=1257,
92 ProtocolType_Unknown=-1
95 /* This is a copy of System.Net.Sockets.SocketOptionLevel */
97 SocketOptionLevel_Socket=65535,
98 SocketOptionLevel_IP=0,
99 SocketOptionLevel_IPv6=41,
100 SocketOptionLevel_Tcp=6,
101 SocketOptionLevel_Udp=17
102 } MonoSocketOptionLevel;
104 /* This is a copy of System.Net.Sockets.SocketOptionName */
106 SocketOptionName_Debug=1,
107 SocketOptionName_AcceptConnection=2,
108 SocketOptionName_ReuseAddress=4,
109 SocketOptionName_KeepAlive=8,
110 SocketOptionName_DontRoute=16,
111 SocketOptionName_IPProtectionLevel = 23,
112 SocketOptionName_IPv6Only = 27,
113 SocketOptionName_Broadcast=32,
114 SocketOptionName_UseLoopback=64,
115 SocketOptionName_Linger=128,
116 SocketOptionName_OutOfBandInline=256,
117 SocketOptionName_DontLinger= -129,
118 SocketOptionName_ExclusiveAddressUse= -5,
119 SocketOptionName_SendBuffer= 4097,
120 SocketOptionName_ReceiveBuffer=4098,
121 SocketOptionName_SendLowWater=4099,
122 SocketOptionName_ReceiveLowWater=4100,
123 SocketOptionName_SendTimeout=4101,
124 SocketOptionName_ReceiveTimeout=4102,
125 SocketOptionName_Error=4103,
126 SocketOptionName_Type=4104,
127 SocketOptionName_MaxConnections=2147483647,
128 SocketOptionName_IPOptions=1,
129 SocketOptionName_HeaderIncluded=2,
130 SocketOptionName_TypeOfService=3,
131 SocketOptionName_IpTimeToLive=4,
132 SocketOptionName_MulticastInterface=9,
133 SocketOptionName_MulticastTimeToLive=10,
134 SocketOptionName_MulticastLoopback=11,
135 SocketOptionName_AddMembership=12,
136 SocketOptionName_DropMembership=13,
137 SocketOptionName_DontFragment=14,
138 SocketOptionName_AddSourceMembership=15,
139 SocketOptionName_DropSourceMembership=16,
140 SocketOptionName_BlockSource=17,
141 SocketOptionName_UnblockSource=18,
142 SocketOptionName_PacketInformation=19,
143 SocketOptionName_NoDelay=1,
144 SocketOptionName_BsdUrgent=2,
145 SocketOptionName_Expedited=2,
146 SocketOptionName_NoChecksum=1,
147 SocketOptionName_ChecksumCoverage=20,
148 SocketOptionName_HopLimit=21,
150 /* This is Mono-specific, keep it in sync with
151 * Mono.Posix/PeerCred.cs
153 SocketOptionName_PeerCred=10001
154 } MonoSocketOptionName;
156 /* This is a copy of System.Net.Sockets.SocketFlags */
158 SocketFlags_None = 0x0000,
159 SocketFlags_OutOfBand = 0x0001,
160 SocketFlags_MaxIOVectorLength = 0x0010,
161 SocketFlags_Peek = 0x0002,
162 SocketFlags_DontRoute = 0x0004,
163 SocketFlags_Partial = 0x8000
174 /* Safely access Mono.Posix.PeerCredData from native code */
175 TYPED_HANDLE_DECL (MonoPeerCredData);
178 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObjectHandle this_obj, gint32 family, gint32 type,
179 gint32 proto, gint32 *werror, MonoError *error);
182 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *werror, MonoError *error);
185 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void);
188 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *werror, MonoError *error);
191 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *werror, MonoError *error);
194 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *werror, gboolean blocking, MonoError *error);
197 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *werror, MonoError *error);
200 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
203 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
206 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, MonoError *error);
209 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
212 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, gchar *buffer, gint32 count,
213 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
216 ves_icall_System_Net_Sockets_Socket_Receive_array_internal (gsize sock, WSABUF *buffers, gint32 count, gint32 flags,
217 gint32 *werror, gboolean blocking, MonoError *error);
220 ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, gchar *buffer, gint32 count,
221 gint32 flags, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
225 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, gchar *buffer, gint32 count,
226 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
229 ves_icall_System_Net_Sockets_Socket_Send_array_internal (gsize sock, WSABUF *buffers, gint32 count, gint32 flags,
230 gint32 *werror, gboolean blocking, MonoError *error);
233 ves_icall_System_Net_Sockets_Socket_SendTo_internal (gsize sock, gchar *buffer, gint32 count,
234 gint32 flags, MonoObjectHandle sockaddr, gint32 *werror,
235 gboolean blocking, MonoError *error);
238 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArrayHandle sockets, gint32 timeout, gint32 *werror, MonoError *error);
241 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *werror, MonoError *error);
244 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name,
245 MonoObjectHandle obj_val, gint32 *werror,
249 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name,
250 MonoArrayHandle byte_val, gint32 *werror,
254 ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32 level, gint32 name,
255 MonoObjectHandle obj_val, MonoArrayHandle byte_val,
256 gint32 int_val, gint32 *werror, MonoError *error);
259 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code,
260 MonoArrayHandle input, MonoArrayHandle output,
261 gint32 *werror, MonoError *error);
264 ves_icall_System_Net_Dns_GetHostByName_internal (MonoStringHandle host, MonoStringHandleOut h_name,
265 MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
266 gint32 hint, MonoError *error);
269 ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoStringHandle addr, MonoStringHandleOut h_name,
270 MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
271 gint32 hint, MonoError *error);
274 ves_icall_System_Net_Dns_GetHostName_internal (MonoStringHandleOut h_name, MonoError *error);
277 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *werror, MonoError *error);
280 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *werror, MonoError *error);
283 ves_icall_System_Net_Sockets_Socket_Duplicate_internal (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle, gint32 *werror, MonoError *error);
286 ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoStringHandle filename,
287 MonoArrayHandle pre_buffer, MonoArrayHandle post_buffer,
288 gint flags, gint32 *werror, gboolean blocking, MonoError *error);
291 icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error);
294 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto, MonoError *error);
297 mono_network_init(void);
300 mono_network_cleanup(void);
302 #endif /* _MONO_METADATA_W32SOCKET_H_ */