2 * w32socket.h: System.Net.Sockets.Socket support
5 * Dick Porter (dick@ximian.com)
7 * (C) 2001 Ximian, Inc.
10 #ifndef _MONO_METADATA_W32SOCKET_H_
11 #define _MONO_METADATA_W32SOCKET_H_
16 #include <mono/metadata/object-internals.h>
18 #define INVALID_SOCKET ((SOCKET)(guint32)(~0))
19 #define SOCKET_ERROR (-1)
25 /* This is a copy of System.Net.Sockets.SocketType */
31 SocketType_Seqpacket=5,
35 /* This is a copy of System.Net.Sockets.AddressFamily */
37 AddressFamily_Unknown=-1,
38 AddressFamily_Unspecified=0,
40 AddressFamily_InterNetwork=2,
41 AddressFamily_ImpLink=3,
43 AddressFamily_Chaos=5,
49 AddressFamily_DataKit=9,
50 AddressFamily_Ccitt=10,
52 AddressFamily_DecNet=12,
53 AddressFamily_DataLink=13,
55 AddressFamily_HyperChannel=15,
56 AddressFamily_AppleTalk=16,
57 AddressFamily_NetBios=17,
58 AddressFamily_VoiceView=18,
59 AddressFamily_FireFox=19,
60 AddressFamily_Banyan=21,
62 AddressFamily_InterNetworkV6=23,
63 AddressFamily_Cluster=24,
64 AddressFamily_Ieee12844=25,
65 AddressFamily_Irda=26,
66 AddressFamily_NetworkDesigners=28
69 /* This is a copy of System.Net.Sockets.ProtocolType */
82 ProtocolType_Unspecified=0,
83 ProtocolType_Ipx=1000,
84 ProtocolType_Spx=1256,
85 ProtocolType_SpxII=1257,
86 ProtocolType_Unknown=-1
89 /* This is a copy of System.Net.Sockets.SocketOptionLevel */
91 SocketOptionLevel_Socket=65535,
92 SocketOptionLevel_IP=0,
93 SocketOptionLevel_IPv6=41,
94 SocketOptionLevel_Tcp=6,
95 SocketOptionLevel_Udp=17
96 } MonoSocketOptionLevel;
98 /* This is a copy of System.Net.Sockets.SocketOptionName */
100 SocketOptionName_Debug=1,
101 SocketOptionName_AcceptConnection=2,
102 SocketOptionName_ReuseAddress=4,
103 SocketOptionName_KeepAlive=8,
104 SocketOptionName_DontRoute=16,
105 SocketOptionName_IPProtectionLevel = 23,
106 SocketOptionName_IPv6Only = 27,
107 SocketOptionName_Broadcast=32,
108 SocketOptionName_UseLoopback=64,
109 SocketOptionName_Linger=128,
110 SocketOptionName_OutOfBandInline=256,
111 SocketOptionName_DontLinger= -129,
112 SocketOptionName_ExclusiveAddressUse= -5,
113 SocketOptionName_SendBuffer= 4097,
114 SocketOptionName_ReceiveBuffer=4098,
115 SocketOptionName_SendLowWater=4099,
116 SocketOptionName_ReceiveLowWater=4100,
117 SocketOptionName_SendTimeout=4101,
118 SocketOptionName_ReceiveTimeout=4102,
119 SocketOptionName_Error=4103,
120 SocketOptionName_Type=4104,
121 SocketOptionName_MaxConnections=2147483647,
122 SocketOptionName_IPOptions=1,
123 SocketOptionName_HeaderIncluded=2,
124 SocketOptionName_TypeOfService=3,
125 SocketOptionName_IpTimeToLive=4,
126 SocketOptionName_MulticastInterface=9,
127 SocketOptionName_MulticastTimeToLive=10,
128 SocketOptionName_MulticastLoopback=11,
129 SocketOptionName_AddMembership=12,
130 SocketOptionName_DropMembership=13,
131 SocketOptionName_DontFragment=14,
132 SocketOptionName_AddSourceMembership=15,
133 SocketOptionName_DropSourceMembership=16,
134 SocketOptionName_BlockSource=17,
135 SocketOptionName_UnblockSource=18,
136 SocketOptionName_PacketInformation=19,
137 SocketOptionName_NoDelay=1,
138 SocketOptionName_BsdUrgent=2,
139 SocketOptionName_Expedited=2,
140 SocketOptionName_NoChecksum=1,
141 SocketOptionName_ChecksumCoverage=20,
142 SocketOptionName_HopLimit=21,
144 /* This is Mono-specific, keep it in sync with
145 * Mono.Posix/PeerCred.cs
147 SocketOptionName_PeerCred=10001
148 } MonoSocketOptionName;
150 /* This is a copy of System.Net.Sockets.SocketFlags */
152 SocketFlags_None = 0x0000,
153 SocketFlags_OutOfBand = 0x0001,
154 SocketFlags_MaxIOVectorLength = 0x0010,
155 SocketFlags_Peek = 0x0002,
156 SocketFlags_DontRoute = 0x0004,
157 SocketFlags_Partial = 0x8000
169 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObject *this_obj, gint32 family, gint32 type, gint32 proto,
173 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *error);
176 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void);
179 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *error);
182 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *error);
185 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *error, gboolean blocking);
188 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *error);
191 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *error);
194 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *error);
197 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObject *sockaddr, gint32 *error);
200 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObject *sockaddr, gint32 *error, gboolean blocking);
203 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
204 gint32 flags, gint32 *error, gboolean blocking);
207 ves_icall_System_Net_Sockets_Socket_Receive_array_internal (gsize sock, MonoArray *buffers, gint32 flags, gint32 *error,
211 ves_icall_System_Net_Sockets_Socket_ReceiveFrom_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
212 gint32 flags, MonoObject **sockaddr, gint32 *error, gboolean blocking);
215 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
216 gint32 flags, gint32 *error, gboolean blocking);
219 ves_icall_System_Net_Sockets_Socket_Send_array_internal (gsize sock, MonoArray *buffers, gint32 flags, gint32 *error,
223 ves_icall_System_Net_Sockets_Socket_SendTo_internal (gsize sock, MonoArray *buffer, gint32 offset, gint32 count,
224 gint32 flags, MonoObject *sockaddr, gint32 *error, gboolean blocking);
227 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArray **sockets, gint32 timeout, gint32 *error);
230 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *error);
233 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name,
234 MonoObject **obj_val, gint32 *error);
237 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name,
238 MonoArray **byte_val, gint32 *error);
241 ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal (gsize sock, gint32 level, gint32 name,
242 MonoObject *obj_val, MonoArray *byte_val, gint32 int_val, gint32 *error);
245 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code, MonoArray *input, MonoArray *output,
249 ves_icall_System_Net_Dns_GetHostByName_internal (MonoString *host, MonoString **h_name, MonoArray **h_aliases,
250 MonoArray **h_addr_list, gint32 hint);
253 ves_icall_System_Net_Dns_GetHostByAddr_internal (MonoString *addr, MonoString **h_name, MonoArray **h_aliases,
254 MonoArray **h_addr_list, gint32 hint);
257 ves_icall_System_Net_Dns_GetHostName_internal (MonoString **h_name);
260 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *error);
263 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *error);
266 ves_icall_System_Net_Sockets_Socket_SendFile_internal (gsize sock, MonoString *filename, MonoArray *pre_buffer,
267 MonoArray *post_buffer, gint flags, gint32 *error, gboolean blocking);
270 icall_cancel_blocking_socket_operation (MonoThread *thread);
273 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto);
276 mono_network_init(void);
279 mono_network_cleanup(void);
281 #endif /* _MONO_METADATA_W32SOCKET_H_ */