authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-06-20 20:57:46-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-06-30 13:54:02-07:00
log6d3a78b8dd5071dee68b6b6c10f79b7b2f34d5e9
tree157dd1e199e92082437f424606d92c986b8ce83a
parente51fd6728fcc4dd93e3bd1ddb2e4ca96a8082b12

std.Thread.Pool: fix connection

TCP cannot be used with UNIX domain sockets

1 files changed, 24 insertions(+), 9 deletions(-)

lib/std/Thread/Pool.zig+24-9
......@@ -312,8 +312,8 @@ pub fn spawn(pool: *Pool, comptime func: anytype, args: anytype) void {
312312
313313fn worker(pool: *Pool) void {
314314 var trash_buf: [1]u8 = undefined;
315 var connection: ?std.net.Stream = null;
316 defer if (connection) |stream| stream.close();
315 var connection: ?std.posix.fd_t = null;
316 defer if (connection) |fd| std.posix.close(fd);
317317
318318 pool.mutex.lock();
319319 defer pool.mutex.unlock();
......@@ -326,11 +326,26 @@ fn worker(pool: *Pool) void {
326326
327327 if (connection == null) switch (pool.job_server_options) {
328328 .abstain => {},
329 .connect, .host => |addr| {
330 if (std.net.tcpConnectToAddress(addr)) |stream| {
331 connection = stream;
332 _ = stream.readAll(&trash_buf) catch 1;
333 } else |_| {}
329 .connect, .host => |addr| lock: {
330 const sockfd = std.posix.socket(
331 std.posix.AF.UNIX,
332 std.posix.SOCK.STREAM | std.posix.SOCK.CLOEXEC,
333 0,
334 ) catch |err| {
335 std.log.debug("failed to make socket: {s}", .{@errorName(err)});
336 break :lock;
337 };
338 connection = sockfd;
339
340 std.posix.connect(sockfd, &addr.any, addr.getOsSockLen()) catch |err| {
341 std.log.debug("failed to connect: {s}", .{@errorName(err)});
342 break :lock;
343 };
344
345 _ = std.posix.read(sockfd, &trash_buf) catch |err| {
346 std.log.debug("failed to read: {s}", .{@errorName(err)});
347 break :lock;
348 };
334349 },
335350 };
336351
......@@ -342,8 +357,8 @@ fn worker(pool: *Pool) void {
342357 if (pool.end_flag)
343358 break;
344359
345 if (connection) |stream| {
346 stream.close();
360 if (connection) |fd| {
361 std.posix.close(fd);
347362 connection = null;
348363 }
349364