aboutsummaryrefslogtreecommitdiff
path: root/libi3/nonblock.c
blob: 987c274a2d898900dde32a3f644b229bed35713b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "libi3.h"

#include <err.h>
#include <fcntl.h>

/*
 * Puts the given socket file descriptor into non-blocking mode or dies if
 * setting O_NONBLOCK failed. Non-blocking sockets are a good idea for our
 * IPC model because we should by no means block the window manager.
 *
 */
void set_nonblock(int sockfd) {
    int flags = fcntl(sockfd, F_GETFL, 0);
    if (flags & O_NONBLOCK) {
        return;
    }
    flags |= O_NONBLOCK;
    if (fcntl(sockfd, F_SETFL, flags) < 0) {
        err(-1, "Could not set O_NONBLOCK");
    }
}