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>
19 #define INVALID_SOCKET ((SOCKET)(guint32)(~0))
20 #define SOCKET_ERROR (-1)
26 /* This is a copy of System.Net.Sockets.SocketType */
32 SocketType_Seqpacket=5,
36 /* This is a copy of System.Net.Sockets.AddressFamily */
38 AddressFamily_Unknown=-1,
39 AddressFamily_Unspecified=0,
41 AddressFamily_InterNetwork=2,
42 AddressFamily_ImpLink=3,
44 AddressFamily_Chaos=5,
50 AddressFamily_DataKit=9,
51 AddressFamily_Ccitt=10,
53 AddressFamily_DecNet=12,
54 AddressFamily_DataLink=13,
56 AddressFamily_HyperChannel=15,
57 AddressFamily_AppleTalk=16,
58 AddressFamily_NetBios=17,
59 AddressFamily_VoiceView=18,
60 AddressFamily_FireFox=19,
61 AddressFamily_Banyan=21,
63 AddressFamily_InterNetworkV6=23,
64 AddressFamily_Cluster=24,
65 AddressFamily_Ieee12844=25,
66 AddressFamily_Irda=26,
67 AddressFamily_NetworkDesigners=28
70 /* This is a copy of System.Net.Sockets.ProtocolType */
83 ProtocolType_Unspecified=0,
84 ProtocolType_Ipx=1000,
85 ProtocolType_Spx=1256,
86 ProtocolType_SpxII=1257,
87 ProtocolType_Unknown=-1
90 /* This is a copy of System.Net.Sockets.SocketOptionLevel */
92 SocketOptionLevel_Socket=65535,
93 SocketOptionLevel_IP=0,
94 SocketOptionLevel_IPv6=41,
95 SocketOptionLevel_Tcp=6,
96 SocketOptionLevel_Udp=17
97 } MonoSocketOptionLevel;
99 /* This is a copy of System.Net.Sockets.SocketOptionName */
101 SocketOptionName_Debug=1,
102 SocketOptionName_AcceptConnection=2,
103 SocketOptionName_ReuseAddress=4,
104 SocketOptionName_KeepAlive=8,
105 SocketOptionName_DontRoute=16,
106 SocketOptionName_IPProtectionLevel = 23,
107 SocketOptionName_IPv6Only = 27,
108 SocketOptionName_Broadcast=32,
109 SocketOptionName_UseLoopback=64,
110 SocketOptionName_Linger=128,
111 SocketOptionName_OutOfBandInline=256,
112 SocketOptionName_DontLinger= -129,
113 SocketOptionName_ExclusiveAddressUse= -5,
114 SocketOptionName_SendBuffer= 4097,
115 SocketOptionName_ReceiveBuffer=4098,
116 SocketOptionName_SendLowWater=4099,
117 SocketOptionName_ReceiveLowWater=4100,
118 SocketOptionName_SendTimeout=4101,
119 SocketOptionName_ReceiveTimeout=4102,
120 SocketOptionName_Error=4103,
121 SocketOptionName_Type=4104,
122 SocketOptionName_MaxConnections=2147483647,
123 SocketOptionName_IPOptions=1,
124 SocketOptionName_HeaderIncluded=2,
125 SocketOptionName_TypeOfService=3,
126 SocketOptionName_IpTimeToLive=4,
127 SocketOptionName_MulticastInterface=9,
128 SocketOptionName_MulticastTimeToLive=10,
129 SocketOptionName_MulticastLoopback=11,
130 SocketOptionName_AddMembership=12,
131 SocketOptionName_DropMembership=13,
132 SocketOptionName_DontFragment=14,
133 SocketOptionName_AddSourceMembership=15,
134 SocketOptionName_DropSourceMembership=16,
135 SocketOptionName_BlockSource=17,
136 SocketOptionName_UnblockSource=18,
137 SocketOptionName_PacketInformation=19,
138 SocketOptionName_NoDelay=1,
139 SocketOptionName_BsdUrgent=2,
140 SocketOptionName_Expedited=2,
141 SocketOptionName_NoChecksum=1,
142 SocketOptionName_ChecksumCoverage=20,
143 SocketOptionName_HopLimit=21,
145 /* This is Mono-specific, keep it in sync with
146 * Mono.Posix/PeerCred.cs
148 SocketOptionName_PeerCred=10001
149 } MonoSocketOptionName;
151 /* This is a copy of System.Net.Sockets.SocketFlags */
153 SocketFlags_None = 0x0000,
154 SocketFlags_OutOfBand = 0x0001,
155 SocketFlags_MaxIOVectorLength = 0x0010,
156 SocketFlags_Peek = 0x0002,
157 SocketFlags_DontRoute = 0x0004,
158 SocketFlags_Partial = 0x8000
169 /* Safely access Mono.Posix.PeerCredData from native code */
170 TYPED_HANDLE_DECL (MonoPeerCredData);
173 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObjectHandle this_obj, gint32 family, gint32 type,
174 gint32 proto, gint32 *werror, MonoError *error);
177 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *werror, MonoError *error);
180 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void);
183 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *werror, MonoError *error);
186 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *werror, MonoError *error);
189 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *werror, gboolean blocking, MonoError *error);
192 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *werror, MonoError *error);
195 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
198 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error);
201 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, MonoError *error);
204 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
207 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, MonoArrayHandle buffer, gint32 offset, gint32 count,
208 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
211 ves_icall_System_Net_Sockets_Socket_Receive_array_internal (gsize sock, MonoArrayHandle buffers, gint32 flags,
212 gint32 *werror, gboolean blocking, MonoError *error);
215 /* ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count, */
216 /* gint32 flags, MonoObject **sockaddr, gint32 *werror, gboolean blocking); */
219 ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, MonoArrayHandle buffer, gint32 offset, gint32 count,
220 gint32 flags, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error);
224 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, MonoArrayHandle buffer, gint32 offset, gint32 count,
225 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error);
228 ves_icall_System_Net_Sockets_Socket_Send_array_internal (gsize sock, MonoArrayHandle buffers, gint32 flags,
229 gint32 *werror, gboolean blocking, MonoError *error);
232 ves_icall_System_Net_Sockets_Socket_SendTo_internal (gsize sock, MonoArrayHandle buffer, gint32 offset, gint32 count,
233 gint32 flags, MonoObjectHandle sockaddr, gint32 *werror,
234 gboolean blocking, MonoError *error);
237 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArrayHandle sockets, gint32 timeout, gint32 *werror, MonoError *error);
240 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *werror, MonoError *error);
243 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name,
244 MonoObjectHandle obj_val, gint32 *werror,
248 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name,
249 MonoArrayHandle byte_val, gint32 *werror,
253 ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32 level, gint32 name,
254 MonoObjectHandle obj_val, MonoArrayHandle byte_val,
255 gint32 int_val, gint32 *werror, MonoError *error);
258 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code,
259 MonoArrayHandle input, MonoArrayHandle output,
260 gint32 *werror, MonoError *error);
263 ves_icall_System_Net_Dns_GetHostByName_internal (MonoStringHandle host, MonoStringHandleOut h_name,
264 MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
265 gint32 hint, MonoError *error);
268 ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoStringHandle addr, MonoStringHandleOut h_name,
269 MonoArrayHandleOut h_aliases, MonoArrayHandleOut h_addr_list,
270 gint32 hint, MonoError *error);
273 ves_icall_System_Net_Dns_GetHostName_internal (MonoStringHandleOut h_name, MonoError *error);
276 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *werror, MonoError *error);
279 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *werror, MonoError *error);
282 ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoStringHandle filename,
283 MonoArrayHandle pre_buffer, MonoArrayHandle post_buffer,
284 gint flags, gint32 *werror, gboolean blocking, MonoError *error);
287 icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error);
290 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto, MonoError *error);
293 mono_network_init(void);
296 mono_network_cleanup(void);
298 #endif /* _MONO_METADATA_W32SOCKET_H_ */