authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-05 12:50:50-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2020-05-05 12:50:50-04:00
logb13a02ed1aaab407a29b37bb5559639bf3a69715
tree4da25b198f947d548a0c636ac0d41f7c9ef2edac
parent0a2104689b4c3c686f2268b5053ad38fd01c1d55

avoid unnecessary fcntl syscalls when setting socket flags


1 files changed, 6 insertions(+), 6 deletions(-)

lib/std/os.zig+6-6
......@@ -2173,7 +2173,7 @@ pub fn socket(domain: u32, socket_type: u32, protocol: u32) SocketError!fd_t {
21732173 switch (errno(rc)) {
21742174 0 => {
21752175 const fd = @intCast(fd_t, rc);
2176 if (!have_sock_flags and filtered_sock_type != socket_type) {
2176 if (!have_sock_flags) {
21772177 try setSockFlags(fd, socket_type);
21782178 }
21792179 return fd;
......@@ -2341,7 +2341,7 @@ pub fn accept(
23412341 switch (errno(rc)) {
23422342 0 => {
23432343 const fd = @intCast(fd_t, rc);
2344 if (!have_accept4 and flags != 0) {
2344 if (!have_accept4) {
23452345 try setSockFlags(fd, flags);
23462346 }
23472347 return fd;
......@@ -3277,26 +3277,26 @@ pub fn fcntl(fd: fd_t, cmd: i32, arg: usize) FcntlError!usize {
32773277}
32783278
32793279fn setSockFlags(fd: fd_t, flags: u32) !void {
3280 {
3280 if ((flags & SOCK_CLOEXEC) != 0) {
32813281 var fd_flags = fcntl(fd, F_GETFD, 0) catch |err| switch (err) {
32823282 error.FileBusy => unreachable,
32833283 error.Locked => unreachable,
32843284 else => |e| return e,
32853285 };
3286 if ((flags & SOCK_CLOEXEC) != 0) fd_flags |= FD_CLOEXEC;
3286 fd_flags |= FD_CLOEXEC;
32873287 _ = fcntl(fd, F_SETFD, fd_flags) catch |err| switch (err) {
32883288 error.FileBusy => unreachable,
32893289 error.Locked => unreachable,
32903290 else => |e| return e,
32913291 };
32923292 }
3293 {
3293 if ((flags & SOCK_NONBLOCK) != 0) {
32943294 var fl_flags = fcntl(fd, F_GETFL, 0) catch |err| switch (err) {
32953295 error.FileBusy => unreachable,
32963296 error.Locked => unreachable,
32973297 else => |e| return e,
32983298 };
3299 if ((flags & SOCK_NONBLOCK) != 0) fl_flags |= O_NONBLOCK;
3299 fl_flags |= O_NONBLOCK;
33003300 _ = fcntl(fd, F_SETFL, fl_flags) catch |err| switch (err) {
33013301 error.FileBusy => unreachable,
33023302 error.Locked => unreachable,