1 /** 2 * \file 3 * System.Net.Sockets.Socket support 4 * 5 * Author: 6 * Dick Porter (dick@ximian.com) 7 * 8 * (C) 2001 Ximian, Inc. 9 */ 10 11 #ifndef _MONO_METADATA_W32SOCKET_H_ 12 #define _MONO_METADATA_W32SOCKET_H_ 13 14 #include <config.h> 15 #include <glib.h> 16 17 #include <mono/metadata/object-internals.h> 18 19 #ifndef HOST_WIN32 20 #define INVALID_SOCKET ((SOCKET)(guint32)(~0)) 21 #define SOCKET_ERROR (-1) 22 23 typedef gint SOCKET; 24 25 typedef struct { 26 guint32 len; 27 gpointer buf; 28 } WSABUF, *LPWSABUF; 29 #endif 30 31 /* This is a copy of System.Net.Sockets.SocketType */ 32 typedef enum { 33 SocketType_Stream=1, 34 SocketType_Dgram=2, 35 SocketType_Raw=3, 36 SocketType_Rdm=4, 37 SocketType_Seqpacket=5, 38 SocketType_Unknown=-1 39 } MonoSocketType; 40 41 /* This is a copy of System.Net.Sockets.AddressFamily */ 42 typedef enum { 43 AddressFamily_Unknown=-1, 44 AddressFamily_Unspecified=0, 45 AddressFamily_Unix=1, 46 AddressFamily_InterNetwork=2, 47 AddressFamily_ImpLink=3, 48 AddressFamily_Pup=4, 49 AddressFamily_Chaos=5, 50 AddressFamily_NS=6, 51 AddressFamily_Ipx=6, 52 AddressFamily_Iso=7, 53 AddressFamily_Osi=7, 54 AddressFamily_Ecma=8, 55 AddressFamily_DataKit=9, 56 AddressFamily_Ccitt=10, 57 AddressFamily_Sna=11, 58 AddressFamily_DecNet=12, 59 AddressFamily_DataLink=13, 60 AddressFamily_Lat=14, 61 AddressFamily_HyperChannel=15, 62 AddressFamily_AppleTalk=16, 63 AddressFamily_NetBios=17, 64 AddressFamily_VoiceView=18, 65 AddressFamily_FireFox=19, 66 AddressFamily_Banyan=21, 67 AddressFamily_Atm=22, 68 AddressFamily_InterNetworkV6=23, 69 AddressFamily_Cluster=24, 70 AddressFamily_Ieee12844=25, 71 AddressFamily_Irda=26, 72 AddressFamily_NetworkDesigners=28 73 } MonoAddressFamily; 74 75 /* This is a copy of System.Net.Sockets.ProtocolType */ 76 typedef enum { 77 ProtocolType_IP=0, 78 ProtocolType_Icmp=1, 79 ProtocolType_Igmp=2, 80 ProtocolType_Ggp=3, 81 ProtocolType_Tcp=6, 82 ProtocolType_Pup=12, 83 ProtocolType_Udp=17, 84 ProtocolType_Idp=22, 85 ProtocolType_IPv6=41, 86 ProtocolType_ND=77, 87 ProtocolType_Raw=255, 88 ProtocolType_Unspecified=0, 89 ProtocolType_Ipx=1000, 90 ProtocolType_Spx=1256, 91 ProtocolType_SpxII=1257, 92 ProtocolType_Unknown=-1 93 } MonoProtocolType; 94 95 /* This is a copy of System.Net.Sockets.SocketOptionLevel */ 96 typedef enum { 97 SocketOptionLevel_Socket=65535, 98 SocketOptionLevel_IP=0, 99 SocketOptionLevel_IPv6=41, 100 SocketOptionLevel_Tcp=6, 101 SocketOptionLevel_Udp=17 102 } MonoSocketOptionLevel; 103 104 /* This is a copy of System.Net.Sockets.SocketOptionName */ 105 typedef enum { 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, 149 150 /* This is Mono-specific, keep it in sync with 151 * Mono.Posix/PeerCred.cs 152 */ 153 SocketOptionName_PeerCred=10001 154 } MonoSocketOptionName; 155 156 /* This is a copy of System.Net.Sockets.SocketFlags */ 157 typedef enum { 158 SocketFlags_None = 0x0000, 159 SocketFlags_OutOfBand = 0x0001, 160 SocketFlags_MaxIOVectorLength = 0x0010, 161 SocketFlags_Peek = 0x0002, 162 SocketFlags_DontRoute = 0x0004, 163 SocketFlags_Partial = 0x8000 164 } MonoSocketFlags; 165 166 typedef struct 167 { 168 MonoObject obj; 169 gint pid; 170 gint uid; 171 gint gid; 172 } MonoPeerCredData; 173 174 /* Safely access Mono.Posix.PeerCredData from native code */ 175 TYPED_HANDLE_DECL (MonoPeerCredData); 176 177 gpointer 178 ves_icall_System_Net_Sockets_Socket_Socket_internal (MonoObjectHandle this_obj, gint32 family, gint32 type, 179 gint32 proto, gint32 *werror, MonoError *error); 180 181 void 182 ves_icall_System_Net_Sockets_Socket_Close_internal (gsize sock, gint32 *werror, MonoError *error); 183 184 gint32 185 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal (void); 186 187 gint32 188 ves_icall_System_Net_Sockets_Socket_Available_internal (gsize sock, gint32 *werror, MonoError *error); 189 190 void 191 ves_icall_System_Net_Sockets_Socket_Blocking_internal (gsize sock, gboolean block, gint32 *werror, MonoError *error); 192 193 gpointer 194 ves_icall_System_Net_Sockets_Socket_Accept_internal (gsize sock, gint32 *werror, gboolean blocking, MonoError *error); 195 196 void 197 ves_icall_System_Net_Sockets_Socket_Listen_internal (gsize sock, guint32 backlog, gint32 *werror, MonoError *error); 198 199 MonoObjectHandle 200 ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error); 201 202 MonoObjectHandle 203 ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal (gsize sock, gint32 af, gint32 *werror, MonoError *error); 204 205 void 206 ves_icall_System_Net_Sockets_Socket_Bind_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, MonoError *error); 207 208 void 209 ves_icall_System_Net_Sockets_Socket_Connect_internal (gsize sock, MonoObjectHandle sockaddr, gint32 *werror, gboolean blocking, MonoError *error); 210 211 gint32 212 ves_icall_System_Net_Sockets_Socket_Receive_internal (gsize sock, gchar *buffer, gint32 count, 213 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error); 214 215 gint32 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); 218 219 gint32 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); 222 223 224 gint32 225 ves_icall_System_Net_Sockets_Socket_Send_internal (gsize sock, gchar *buffer, gint32 count, 226 gint32 flags, gint32 *werror, gboolean blocking, MonoError *error); 227 228 gint32 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); 231 232 gint32 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); 236 237 void 238 ves_icall_System_Net_Sockets_Socket_Select_internal (MonoArrayHandle sockets, gint32 timeout, gint32 *werror, MonoError *error); 239 240 void 241 ves_icall_System_Net_Sockets_Socket_Shutdown_internal (gsize sock, gint32 how, gint32 *werror, MonoError *error); 242 243 void 244 ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal (gsize sock, gint32 level, gint32 name, 245 MonoObjectHandle obj_val, gint32 *werror, 246 MonoError *error); 247 248 void 249 ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal (gsize sock, gint32 level, gint32 name, 250 MonoArrayHandle byte_val, gint32 *werror, 251 MonoError *error); 252 253 void 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); 257 258 int 259 ves_icall_System_Net_Sockets_Socket_IOControl_internal (gsize sock, gint32 code, 260 MonoArrayHandle input, MonoArrayHandle output, 261 gint32 *werror, MonoError *error); 262 263 MonoBoolean 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); 267 268 MonoBoolean 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); 272 273 MonoBoolean 274 ves_icall_System_Net_Dns_GetHostName_internal (MonoStringHandleOut h_name, MonoError *error); 275 276 MonoBoolean 277 ves_icall_System_Net_Sockets_Socket_Poll_internal (gsize sock, gint mode, gint timeout, gint32 *werror, MonoError *error); 278 279 void 280 ves_icall_System_Net_Sockets_Socket_Disconnect_internal (gsize sock, MonoBoolean reuse, gint32 *werror, MonoError *error); 281 282 MonoBoolean 283 ves_icall_System_Net_Sockets_Socket_Duplicate_internal (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle, gint32 *werror, MonoError *error); 284 285 gboolean 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); 289 290 void 291 icall_cancel_blocking_socket_operation (MonoThreadObjectHandle thread, MonoError *error); 292 293 gboolean 294 ves_icall_System_Net_Sockets_Socket_SupportPortReuse (MonoProtocolType proto, MonoError *error); 295 296 void 297 mono_network_init(void); 298 299 void 300 mono_network_cleanup(void); 301 302 #endif /* _MONO_METADATA_W32SOCKET_H_ */ 303