mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-25 15:06:14 +01:00
gsocket: Set SO_NOSIGPIPE on sockets on Darwin
This is a best-effort approach to preventing SIGPIPE emissions on Darwin and iOS, where they continue to be intercepted by the Xcode debugger even if SIG_IGN prevents them crashing the program. This is similar to the existing code which sets MSG_NOSIGNAL on all send() calls. MSG_NOSIGNAL doesn't exist on Darwin though. Based on a patch from Philip Withnall. https://bugzilla.gnome.org/show_bug.cgi?id=728730
This commit is contained in:
parent
7b34e07ac4
commit
634b692199
@ -579,6 +579,11 @@ g_socket_constructed (GObject *object)
|
||||
g_warning ("Error setting socket status flags: %s", socket_strerror (errsv));
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef SO_NOSIGPIPE
|
||||
/* See note about SIGPIPE below. */
|
||||
g_socket_set_option (socket, SOL_SOCKET, SO_NOSIGPIPE, TRUE, NULL);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
@ -767,6 +772,11 @@ g_socket_class_init (GSocketClass *klass)
|
||||
/* There is no portable, thread-safe way to avoid having the process
|
||||
* be killed by SIGPIPE when calling send() or sendmsg(), so we are
|
||||
* forced to simply ignore the signal process-wide.
|
||||
*
|
||||
* Even if we ignore it though, gdb will still stop if the app
|
||||
* receives a SIGPIPE, which can be confusing and annoying. So when
|
||||
* possible, we also use MSG_NOSIGNAL / SO_NOSIGPIPE elsewhere to
|
||||
* prevent the signal from occurring at all.
|
||||
*/
|
||||
signal (SIGPIPE, SIG_IGN);
|
||||
#endif
|
||||
@ -2677,10 +2687,7 @@ g_socket_receive_from (GSocket *socket,
|
||||
error);
|
||||
}
|
||||
|
||||
/* Although we ignore SIGPIPE, gdb will still stop if the app receives
|
||||
* one, which can be confusing and annoying. So if possible, we want
|
||||
* to suppress the signal entirely.
|
||||
*/
|
||||
/* See the comment about SIGPIPE above. */
|
||||
#ifdef MSG_NOSIGNAL
|
||||
#define G_SOCKET_DEFAULT_SEND_FLAGS MSG_NOSIGNAL
|
||||
#else
|
||||
|
Loading…
Reference in New Issue
Block a user