mirror of
https://github.com/ziglang/zig.git
synced 2026-02-17 14:59:14 +00:00
std.net.listen: fix Windows API use
In a previous commit I removed a load-bearing use of `@hasDecl` to detect whether the SO.REUSEPORT option should be set. `@hasDecl` should not be used for OS feature detection because it can hide bugs. The new logic checks for the operating system specifically and then does the thing that is supposed to be done on that operating system directly.
This commit is contained in:
parent
6395ba852a
commit
12a9e0f415
@ -217,7 +217,10 @@ pub const Address = extern union {
|
||||
/// If more than this many connections pool in the kernel, clients will start
|
||||
/// seeing "Connection refused".
|
||||
kernel_backlog: u31 = 128,
|
||||
/// Sets SO_REUSEADDR and SO_REUSEPORT on POSIX.
|
||||
/// Sets SO_REUSEADDR on Windows, which is roughly equivalent.
|
||||
reuse_address: bool = false,
|
||||
/// Deprecated. Does nothing.
|
||||
reuse_port: bool = false,
|
||||
force_nonblocking: bool = false,
|
||||
};
|
||||
@ -242,15 +245,15 @@ pub const Address = extern union {
|
||||
posix.SO.REUSEADDR,
|
||||
&mem.toBytes(@as(c_int, 1)),
|
||||
);
|
||||
}
|
||||
|
||||
if (options.reuse_port) {
|
||||
try posix.setsockopt(
|
||||
sockfd,
|
||||
posix.SOL.SOCKET,
|
||||
posix.SO.REUSEPORT,
|
||||
&mem.toBytes(@as(c_int, 1)),
|
||||
);
|
||||
switch (builtin.os.tag) {
|
||||
.windows => {},
|
||||
else => try posix.setsockopt(
|
||||
sockfd,
|
||||
posix.SOL.SOCKET,
|
||||
posix.SO.REUSEPORT,
|
||||
&mem.toBytes(@as(c_int, 1)),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
var socklen = address.getOsSockLen();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user