From 4e239a6632ca648e3bf39b120e2d15822e5540e4 Mon Sep 17 00:00:00 2001 From: George Kiagiadakis Date: Thu, 31 Aug 2017 15:07:45 +0300 Subject: [PATCH] examples: ipcpipeline: do not use the linux-specific SOCK_NONBLOCK flag Use fcntl() instead to set O_NONBLOCK, which is portable. https://bugzilla.gnome.org/show_bug.cgi?id=786763 --- tests/examples/ipcpipeline/ipc-play.c | 8 +++++++- tests/examples/ipcpipeline/ipcpipeline1.c | 9 ++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/examples/ipcpipeline/ipc-play.c b/tests/examples/ipcpipeline/ipc-play.c index e41c07a..805bbcc 100644 --- a/tests/examples/ipcpipeline/ipc-play.c +++ b/tests/examples/ipcpipeline/ipc-play.c @@ -610,10 +610,16 @@ on_pad_added (GstElement * element, GstPad * pad, GstElement * pipeline) g_signal_connect (pad, "unlinked", (GCallback) on_pad_unlinked, pipeline); if (create_sockets) { - if (socketpair (AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, sockets)) { + if (socketpair (AF_UNIX, SOCK_STREAM, 0, sockets)) { fprintf (stderr, "Error creating sockets: %s\n", strerror (errno)); exit (1); } + if (fcntl (sockets[0], F_SETFL, O_NONBLOCK) < 0 || + fcntl (sockets[1], F_SETFL, O_NONBLOCK) < 0) { + fprintf (stderr, "Error setting O_NONBLOCK on sockets: %s\n", + strerror (errno)); + exit (1); + } g_object_set (ipcpipelinesink, "fdin", sockets[0], "fdout", sockets[0], NULL); diff --git a/tests/examples/ipcpipeline/ipcpipeline1.c b/tests/examples/ipcpipeline/ipcpipeline1.c index 4459f0f..df45c4a 100644 --- a/tests/examples/ipcpipeline/ipcpipeline1.c +++ b/tests/examples/ipcpipeline/ipcpipeline1.c @@ -159,10 +159,17 @@ main (int argc, char **argv) int sockets[2]; pid_t pid; - if (socketpair (AF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0, sockets) < 0) { + if (socketpair (AF_UNIX, SOCK_STREAM, 0, sockets)) { fprintf (stderr, "Error creating sockets: %s\n", strerror (errno)); return 1; } + if (fcntl (sockets[0], F_SETFL, O_NONBLOCK) < 0 || + fcntl (sockets[1], F_SETFL, O_NONBLOCK) < 0) { + fprintf (stderr, "Error setting O_NONBLOCK on sockets: %s\n", + strerror (errno)); + return 1; + } + pid = fork (); if (pid < 0) { fprintf (stderr, "Error forking: %s\n", strerror (errno)); -- 2.7.4