#include <config.h>
#include <glib.h>
-#include <mono/metadata/object.h>
+#include <mono/metadata/object-internals.h>
#include <mono/io-layer/io-layer.h>
/* This is a copy of System.Net.Sockets.SocketType */
SocketType_Raw=3,
SocketType_Rdm=4,
SocketType_Seqpacket=5,
- SocketType_Unknown=-1,
+ SocketType_Unknown=-1
} MonoSocketType;
/* This is a copy of System.Net.Sockets.AddressFamily */
AddressFamily_Cluster=24,
AddressFamily_Ieee12844=25,
AddressFamily_Irda=26,
- AddressFamily_NetworkDesigners=28,
+ AddressFamily_NetworkDesigners=28
} MonoAddressFamily;
/* This is a copy of System.Net.Sockets.ProtocolType */
ProtocolType_Pup=12,
ProtocolType_Udp=17,
ProtocolType_Idp=22,
+ ProtocolType_IPv6=41,
ProtocolType_ND=77,
ProtocolType_Raw=255,
ProtocolType_Unspecified=0,
ProtocolType_Ipx=1000,
ProtocolType_Spx=1256,
ProtocolType_SpxII=1257,
- ProtocolType_Unknown=-1,
+ ProtocolType_Unknown=-1
} MonoProtocolType;
/* This is a copy of System.Net.Sockets.SocketOptionLevel */
typedef enum {
SocketOptionLevel_Socket=65535,
SocketOptionLevel_IP=0,
+ SocketOptionLevel_IPv6=41,
SocketOptionLevel_Tcp=6,
- SocketOptionLevel_Udp=17,
+ SocketOptionLevel_Udp=17
} MonoSocketOptionLevel;
/* This is a copy of System.Net.Sockets.SocketOptionName */
SocketOptionName_Expedited=2,
SocketOptionName_NoChecksum=1,
SocketOptionName_ChecksumCoverage=20,
+ SocketOptionName_HopLimit=21,
+
+ /* This is Mono-specific, keep it in sync with
+ * Mono.Posix/PeerCred.cs
+ */
+ SocketOptionName_PeerCred=10001
} MonoSocketOptionName;
-extern SOCKET ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, gint32 family, gint32 type, gint32 proto);
-extern void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock);
-extern gint32 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal(void);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Available_internal(SOCKET sock);
-extern SOCKET ves_icall_System_Net_Sockets_Socket_Accept_internal(SOCKET sock);
-extern void ves_icall_System_Net_Sockets_Socket_Listen_internal(SOCKET sock, guint32 backlog);
-extern MonoObject *ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal(SOCKET sock);
-extern MonoObject *ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal(SOCKET sock);
-extern void ves_icall_System_Net_Sockets_Socket_Bind_internal(SOCKET sock, MonoObject *sockaddr);
-extern void ves_icall_System_Net_Sockets_Socket_Connect_internal(SOCKET sock, MonoObject *sockaddr);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Receive_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags);
-extern gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject **sockaddr);
-extern gint32 ves_icall_System_Net_Sockets_Socket_Send_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags);
-extern gint32 ves_icall_System_Net_Sockets_Socket_SendTo_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject *sockaddr);
-extern gboolean ves_icall_System_Net_Dns_GetHostByName_internal(MonoString *host, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
-extern gboolean ves_icall_System_Net_Dns_GetHostByAddr_internal(MonoString *addr, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list);
+/* This is a copy of System.Net.Sockets.SocketFlags */
+typedef enum {
+ SocketFlags_None = 0x0000,
+ SocketFlags_OutOfBand = 0x0001,
+ SocketFlags_MaxIOVectorLength = 0x0010,
+ SocketFlags_Peek = 0x0002,
+ SocketFlags_DontRoute = 0x0004,
+ SocketFlags_Partial = 0x8000
+} MonoSocketFlags;
+
+/*
+ Keep this in sync with SocketAsyncResult in
+ ./System.Net.Sockets/Socket.cs and ProcessAsyncReader
+ in System.Diagnostics/Process.cs.
+*/
+typedef struct _MonoSocketAsyncResult {
+ MonoObject obj;
+ MonoObject *socket;
+ HANDLE handle;
+ MonoObject *state;
+ MonoDelegate *callback;
+ MonoWaitHandle *wait_handle;
+ MonoException *delayed_exc;
+ MonoObject *ep;
+ MonoArray *buffer;
+ gint offset;
+ gint size;
+ gint socket_flags;
+ MonoObject *accept_reuse_socket;
+ MonoArray *addresses;
+ gint port;
+ MonoObject *buffers;
+ MonoBoolean reusesocket;
+ MonoObject *acc_socket;
+ gint total;
+ MonoBoolean completed_synch;
+ MonoBoolean completed;
+ MonoBoolean blocking;
+ gint error;
+ gint operation;
+ MonoAsyncResult *ares;
+ gint32 end_called;
+} MonoSocketAsyncResult;
+
+typedef struct
+{
+ MonoObject obj;
+ gint pid;
+ gint uid;
+ gint gid;
+} MonoPeerCredData;
+extern gpointer ves_icall_System_Net_Sockets_Socket_Socket_internal(MonoObject *this, gint32 family, gint32 type, gint32 proto, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Close_internal(SOCKET sock, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_SocketException_WSAGetLastError_internal(void) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_Available_internal(SOCKET sock, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Blocking_internal(SOCKET sock, gboolean block, gint32 *error) MONO_INTERNAL;
+extern gpointer ves_icall_System_Net_Sockets_Socket_Accept_internal(SOCKET sock, gint32 *error, gboolean blocking) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Listen_internal(SOCKET sock, guint32 backlog, gint32 *error) MONO_INTERNAL;
+extern MonoObject *ves_icall_System_Net_Sockets_Socket_LocalEndPoint_internal(SOCKET sock, gint32 af, gint32 *error) MONO_INTERNAL;
+extern MonoObject *ves_icall_System_Net_Sockets_Socket_RemoteEndPoint_internal(SOCKET sock, gint32 af, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Bind_internal(SOCKET sock, MonoObject *sockaddr, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Connect_internal(SOCKET sock, MonoObject *sockaddr, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_Receive_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_Receive_array_internal(SOCKET sock, MonoArray *buffers, gint32 flags, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_RecvFrom_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject **sockaddr, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_Send_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_Send_array_internal(SOCKET sock, MonoArray *buffers, gint32 flags, gint32 *error) MONO_INTERNAL;
+extern gint32 ves_icall_System_Net_Sockets_Socket_SendTo_internal(SOCKET sock, MonoArray *buffer, gint32 offset, gint32 count, gint32 flags, MonoObject *sockaddr, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Select_internal(MonoArray **sockets, gint32 timeout, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Shutdown_internal(SOCKET sock, gint32 how, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_obj_internal(SOCKET sock, gint32 level, gint32 name, MonoObject **obj_val, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_GetSocketOption_arr_internal(SOCKET sock, gint32 level, gint32 name, MonoArray **byte_val, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_SetSocketOption_internal(SOCKET sock, gint32 level, gint32 name, MonoObject *obj_val, MonoArray *byte_val, gint32 int_val, gint32 *error) MONO_INTERNAL;
+extern int ves_icall_System_Net_Sockets_Socket_WSAIoctl (SOCKET sock, gint32 code, MonoArray *input, MonoArray *output, gint32 *error) MONO_INTERNAL;
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostByName_internal(MonoString *host, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list) MONO_INTERNAL;
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostByAddr_internal(MonoString *addr, MonoString **h_name, MonoArray **h_aliases, MonoArray **h_addr_list) MONO_INTERNAL;
+extern MonoBoolean ves_icall_System_Net_Dns_GetHostName_internal(MonoString **h_name) MONO_INTERNAL;
+extern MonoBoolean ves_icall_System_Net_Sockets_Socket_Poll_internal (SOCKET sock, gint mode, gint timeout, gint32 *error) MONO_INTERNAL;
+extern void ves_icall_System_Net_Sockets_Socket_Disconnect_internal(SOCKET sock, MonoBoolean reuse, gint32 *error) MONO_INTERNAL;
+extern gboolean ves_icall_System_Net_Sockets_Socket_SendFile (SOCKET sock, MonoString *filename, MonoArray *pre_buffer, MonoArray *post_buffer, gint flags) MONO_INTERNAL;
-extern void mono_network_init(void);
-extern void mono_network_cleanup(void);
+extern void mono_network_init(void) MONO_INTERNAL;
+extern void mono_network_cleanup(void) MONO_INTERNAL;
#endif /* _MONO_METADATA_SOCKET_H_ */