1 /** 2 * \file 3 * 4 * Copyright 2016 Microsoft 5 * Licensed under the MIT license. See LICENSE file in the project root for full license information. 6 */ 7 #ifndef __MONO_METADATA_W32SOCKET_INTERNALS_H__ 8 #define __MONO_METADATA_W32SOCKET_INTERNALS_H__ 9 10 #include <config.h> 11 #include <glib.h> 12 13 #ifdef HAVE_SYS_TIME_H 14 #include <sys/time.h> 15 #endif 16 #ifdef HAVE_SYS_SOCKET_H 17 #include <sys/socket.h> 18 #endif 19 20 #include <mono/utils/w32api.h> 21 22 #ifndef HAVE_SOCKLEN_T 23 #define socklen_t int 24 #endif 25 26 #ifndef HOST_WIN32 27 28 #define TF_DISCONNECT 0x01 29 #define TF_REUSE_SOCKET 0x02 30 31 typedef struct { 32 gpointer Head; 33 guint32 HeadLength; 34 gpointer Tail; 35 guint32 TailLength; 36 } TRANSMIT_FILE_BUFFERS, *LPTRANSMIT_FILE_BUFFERS; 37 38 typedef struct { 39 guint32 Data1; 40 guint16 Data2; 41 guint16 Data3; 42 guint8 Data4[8]; 43 } GUID; 44 45 typedef struct { 46 guint32 Internal; 47 guint32 InternalHigh; 48 guint32 Offset; 49 guint32 OffsetHigh; 50 gpointer hEvent; 51 gpointer handle1; 52 gpointer handle2; 53 } OVERLAPPED; 54 55 #endif 56 57 void 58 mono_w32socket_initialize (void); 59 60 void 61 mono_w32socket_cleanup (void); 62 63 SOCKET 64 mono_w32socket_accept (SOCKET s, struct sockaddr *addr, socklen_t *addrlen, gboolean blocking); 65 66 int 67 mono_w32socket_connect (SOCKET s, const struct sockaddr *name, int namelen, gboolean blocking); 68 69 int 70 mono_w32socket_recv (SOCKET s, char *buf, int len, int flags, gboolean blocking); 71 72 int 73 mono_w32socket_recvfrom (SOCKET s, char *buf, int len, int flags, struct sockaddr *from, socklen_t *fromlen, gboolean blocking); 74 75 int 76 mono_w32socket_recvbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 *lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking); 77 78 int 79 mono_w32socket_send (SOCKET s, char *buf, int len, int flags, gboolean blocking); 80 81 int 82 mono_w32socket_sendto (SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen, gboolean blocking); 83 84 int 85 mono_w32socket_sendbuffers (SOCKET s, LPWSABUF lpBuffers, guint32 dwBufferCount, guint32 *lpNumberOfBytesRecvd, guint32 lpFlags, gpointer lpOverlapped, gpointer lpCompletionRoutine, gboolean blocking); 86 87 #if G_HAVE_API_SUPPORT(HAVE_CLASSIC_WINAPI_SUPPORT | HAVE_UWP_WINAPI_SUPPORT) 88 89 BOOL 90 mono_w32socket_transmit_file (SOCKET hSocket, gpointer hFile, LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, guint32 dwReserved, gboolean blocking); 91 92 #endif 93 94 #ifndef HOST_WIN32 95 96 SOCKET 97 mono_w32socket_socket (int domain, int type, int protocol); 98 99 gint 100 mono_w32socket_bind (SOCKET sock, struct sockaddr *addr, socklen_t addrlen); 101 102 gint 103 mono_w32socket_getpeername (SOCKET sock, struct sockaddr *name, socklen_t *namelen); 104 105 gint 106 mono_w32socket_getsockname (SOCKET sock, struct sockaddr *name, socklen_t *namelen); 107 108 gint 109 mono_w32socket_getsockopt (SOCKET sock, gint level, gint optname, gpointer optval, socklen_t *optlen); 110 111 gint 112 mono_w32socket_setsockopt (SOCKET sock, gint level, gint optname, const gpointer optval, socklen_t optlen); 113 114 gint 115 mono_w32socket_listen (SOCKET sock, gint backlog); 116 117 gint 118 mono_w32socket_shutdown (SOCKET sock, gint how); 119 120 gint 121 mono_w32socket_ioctl (SOCKET sock, gint32 command, gchar *input, gint inputlen, gchar *output, gint outputlen, glong *written); 122 123 gboolean 124 mono_w32socket_close (SOCKET sock); 125 126 #endif /* HOST_WIN32 */ 127 128 gint 129 mono_w32socket_disconnect (SOCKET sock, gboolean reuse); 130 131 gint 132 mono_w32socket_set_blocking (SOCKET socket, gboolean blocking); 133 134 gint 135 mono_w32socket_get_available (SOCKET socket, guint64 *amount); 136 137 void 138 mono_w32socket_set_last_error (gint32 error); 139 140 gint32 141 mono_w32socket_get_last_error (void); 142 143 gint32 144 mono_w32socket_convert_error (gint error); 145 146 gboolean 147 mono_w32socket_duplicate (gpointer handle, gint32 targetProcessId, gpointer *duplicate_handle); 148 149 #endif // __MONO_METADATA_W32SOCKET_INTERNALS_H__ 150