diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-04-08 14:49:49 +0400 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-05-12 18:54:11 +0200 |
commit | 277657eaccc9dfcc16b177e95cc1df55e5c5be0f (patch) | |
tree | 988859521fd6ce0b0f7e40824edd5dedf9d6bdfa /glib | |
parent | c43472060bc1a64715f1d2f90a40afb8f31756ba (diff) | |
download | glib-277657eaccc9dfcc16b177e95cc1df55e5c5be0f.tar.gz |
glib/win32: introduce private g_win32_handle_is_socket()
Used in following commits, including in some GIO experiments.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Diffstat (limited to 'glib')
-rw-r--r-- | glib/glib-init.h | 1 | ||||
-rw-r--r-- | glib/glib-private.c | 1 | ||||
-rw-r--r-- | glib/glib-private.h | 3 | ||||
-rw-r--r-- | glib/gwin32.c | 19 |
4 files changed, 24 insertions, 0 deletions
diff --git a/glib/glib-init.h b/glib/glib-init.h index b01d256b9..73e186199 100644 --- a/glib/glib-init.h +++ b/glib/glib-init.h @@ -44,6 +44,7 @@ gboolean _g_win32_call_rtl_version (OSVERSIONINFOEXW *info); extern HMODULE glib_dll; gchar *g_win32_find_helper_executable_path (const gchar *process_name, void *dll_handle); int g_win32_reopen_noninherited (int fd, int mode, GError **err); +gboolean g_win32_handle_is_socket (void *h); #endif diff --git a/glib/glib-private.c b/glib/glib-private.c index 357a43a30..321efc1d6 100644 --- a/glib/glib-private.c +++ b/glib/glib-private.c @@ -56,6 +56,7 @@ glib__private__ (void) g_win32_fstat, g_win32_find_helper_executable_path, g_win32_reopen_noninherited, + g_win32_handle_is_socket, #endif }; diff --git a/glib/glib-private.h b/glib/glib-private.h index 787f8f1fa..39b7c0a8e 100644 --- a/glib/glib-private.h +++ b/glib/glib-private.h @@ -175,6 +175,9 @@ typedef struct { int (* g_win32_reopen_noninherited) (int fd, int mode, GError **err); + + gboolean (* g_win32_handle_is_socket) (void *handle); + #endif diff --git a/glib/gwin32.c b/glib/gwin32.c index a4ed386ba..c0e1d7f3f 100644 --- a/glib/gwin32.c +++ b/glib/gwin32.c @@ -1451,6 +1451,25 @@ g_win32_find_helper_executable_path (const gchar *executable_name, void *dll_han } /* + * g_win32_handle_is_socket: + * @h: a win32 HANDLE + * + * Returns: %TRUE if the handle is a `SOCKET`. + */ +gboolean +g_win32_handle_is_socket (HANDLE h) +{ + int option = 0; + int optlen = sizeof (option); + + /* according to: https://stackoverflow.com/a/50981652/1277510, this is reasonable */ + if (getsockopt ((SOCKET) h, SOL_SOCKET, SO_DEBUG, (char *) &option, &optlen) == SOCKET_ERROR) + return FALSE; + + return TRUE; +} + +/* * g_win32_reopen_noninherited: * @fd: (transfer full): A file descriptor * @mode: _open_osfhandle flags |