4 * Copyright 2016 Microsoft
5 * Licensed under the MIT license. See LICENSE file in the project root for full license information.
7 #ifndef __MONO_METADATA_W32SOCKET_INTERNALS_H__
8 #define __MONO_METADATA_W32SOCKET_INTERNALS_H__
13 #ifdef HAVE_SYS_TIME_H
16 #ifdef HAVE_SYS_SOCKET_H
17 #include <sys/socket.h>
20 #include <mono/utils/w32api.h>
22 #ifndef HAVE_SOCKLEN_T
26 #include <mono/utils/w32subset.h>
28 #if defined(HOST_WIN32) && (HAVE_API_SUPPORT_WIN32_TRANSMIT_FILE || HAVE_API_SUPPORT_WIN32_DISCONNECT_EX)
36 } TRANSMIT_FILE_BUFFERS
, *LPTRANSMIT_FILE_BUFFERS
;
40 #define TF_DISCONNECT 0x01
41 #define TF_REUSE_SOCKET 0x02
62 mono_w32socket_initialize (void);
65 mono_w32socket_cleanup (void);
68 mono_w32socket_accept (SOCKET s
, struct sockaddr
*addr
, socklen_t
*addrlen
, gboolean blocking
);
71 mono_w32socket_connect (SOCKET s
, const struct sockaddr
*name
, socklen_t namelen
, gboolean blocking
);
74 mono_w32socket_recv (SOCKET s
, char *buf
, int len
, int flags
, gboolean blocking
);
77 mono_w32socket_recvfrom (SOCKET s
, char *buf
, int len
, int flags
, struct sockaddr
*from
, socklen_t
*fromlen
, gboolean blocking
);
80 mono_w32socket_recvbuffers (SOCKET s
, LPWSABUF lpBuffers
, guint32 dwBufferCount
, guint32
*lpNumberOfBytesRecvd
, guint32
*lpFlags
, gpointer lpOverlapped
, gpointer lpCompletionRoutine
, gboolean blocking
);
83 mono_w32socket_send (SOCKET s
, void *buf
, int len
, int flags
, gboolean blocking
);
86 mono_w32socket_sendto (SOCKET s
, const char *buf
, int len
, int flags
, const struct sockaddr
*to
, int tolen
, gboolean blocking
);
89 mono_w32socket_sendbuffers (SOCKET s
, LPWSABUF lpBuffers
, guint32 dwBufferCount
, guint32
*lpNumberOfBytesRecvd
, guint32 lpFlags
, gpointer lpOverlapped
, gpointer lpCompletionRoutine
, gboolean blocking
);
92 mono_w32socket_transmit_file (SOCKET hSocket
, gpointer hFile
, gpointer lpTransmitBuffers
, guint32 dwReserved
, gboolean blocking
);
98 mono_w32socket_socket (int domain
, int type
, int protocol
);
101 mono_w32socket_bind (SOCKET sock
, struct sockaddr
*addr
, socklen_t addrlen
);
104 mono_w32socket_getpeername (SOCKET sock
, struct sockaddr
*name
, socklen_t
*namelen
);
107 mono_w32socket_getsockname (SOCKET sock
, struct sockaddr
*name
, socklen_t
*namelen
);
110 mono_w32socket_getsockopt (SOCKET sock
, gint level
, gint optname
, gpointer optval
, socklen_t
*optlen
);
113 mono_w32socket_setsockopt (SOCKET sock
, gint level
, gint optname
, gconstpointer optval
, socklen_t optlen
);
116 mono_w32socket_listen (SOCKET sock
, gint backlog
);
119 mono_w32socket_shutdown (SOCKET sock
, gint how
);
122 mono_w32socket_ioctl (SOCKET sock
, gint32 command
, gchar
*input
, gint inputlen
, gchar
*output
, gint outputlen
, glong
*written
);
125 mono_w32socket_close (SOCKET sock
);
127 #endif /* HOST_WIN32 */
130 mono_w32socket_disconnect (SOCKET sock
, gboolean reuse
);
133 mono_w32socket_set_blocking (SOCKET socket
, gboolean blocking
);
136 mono_w32socket_get_available (SOCKET socket
, guint64
*amount
);
139 mono_w32socket_set_last_error (gint32 error
);
142 mono_w32socket_get_last_error (void);
145 mono_w32socket_convert_error (gint error
);
148 mono_w32socket_duplicate (gpointer handle
, gint32 targetProcessId
, gpointer
*duplicate_handle
);
150 #endif // __MONO_METADATA_W32SOCKET_INTERNALS_H__