summaryrefslogtreecommitdiffstats
path: root/src/main.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2014-11-12 19:53:06 +0100
committerGravatar Nikias Bassen2014-11-12 19:53:06 +0100
commita3cae2b7a3dfe8120f2a65a1fae8640bb4f095a5 (patch)
tree855adf6fdeb4dd526ddd549ecb5a5a3bcce5241d /src/main.c
parenta5e57e872bb5be8b13d3497f2c07fff8a8e37f3f (diff)
downloadusbmuxd-a3cae2b7a3dfe8120f2a65a1fae8640bb4f095a5.tar.gz
usbmuxd-a3cae2b7a3dfe8120f2a65a1fae8640bb4f095a5.tar.bz2
Use non-blocking sockets for client communication
This approach is better than using blocking sockets and select() since there's no guarantee that send() doesn't block. Plus we're using poll() anyway so send() and recv() will only be called if the socket is actually ready for writing/reading.
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index b1f4eeb..2e4439c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -82,6 +82,15 @@ static int create_socket(void) {
return -1;
}
+ int flags = fcntl(listenfd, F_GETFL, 0);
+ if (flags < 0) {
+ usbmuxd_log(LL_FATAL, "ERROR: Could not get flags for socket");
+ } else {
+ if (fcntl(listenfd, F_SETFL, flags | O_NONBLOCK) < 0) {
+ usbmuxd_log(LL_FATAL, "ERROR: Could not set socket to non-blocking");
+ }
+ }
+
bzero(&bind_addr, sizeof(bind_addr));
bind_addr.sun_family = AF_UNIX;
strcpy(bind_addr.sun_path, socket_path);