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_ */