Zig Version
0.16.0
Steps to Reproduce and Observed Behavior
I compiled and ran this program
conststd=@import("std");pubconststd_options:std.Options=.{.log_level=.info};pubfnmain(init:std.process.Init)!void{constio=init.io;constip:std.Io.net.IpAddress=.fromIp6(.unspecified(8888));varserver=tryip.listen(io,.{.reuse_address=true});deferserver.deinit(io);vargroup:std.Io.Group=.init;defergroup.cancel(io);std.log.info("finished setup",.{});constpayload:[1024*1024*1024]u8=@splat(5);varcounter:u64=0;while(true)if(accept(io,&server))|stream|{group.async(io,handle,.{init.gpa,io,stream,payload});counter+=1;if(counter%10==0)std.log.info("accepted {d} connections",.{counter});};}fnaccept(io:std.Io,server:*std.Io.net.Server)?std.Io.net.Stream{constconnection=server.accept(io)catch|e|{std.log.warn("accept failed: {t}",.{e});returnnull;};std.log.debug("received connection",.{});returnconnection;}fnhandle(gpa:std.mem.Allocator,io:std.Io,stream:std.Io.net.Stream,payload:[1024*1024*1024]u8)void{deferstream.close(io);_=payload;_=gpa;constmsg="Hello World\n";varbuffer:[msg.len]u8=undefined;varwriter=stream.writer(io,&buffer);writer.interface.writeAll(msg)catchreturn;writer.interface.flush()catchreturn;stream.shutdown(io,.send)catchreturn;io.sleep(.fromSeconds(1),.real)catch{};}
which was build with this build.zig (command: zig build):
conststd=@import("std");pubfnbuild(b:*std.Build)void{constoptimize=b.standardOptimizeOption(.{});consttarget=b.standardTargetOptions(.{});constmod=b.createModule(.{.root_source_file=b.path("main.zig"),.target=target,.optimize=optimize,});constexe=b.addExecutable(.{.name="server",.root_module=mod,});b.installArtifact(exe);}
After running it with zig-out/bin/server on Linux x86_64, I got this output:
Segmentation fault at address 0x7fff05cf22d0
/home/kilian/toolbox-local/zig/server-test/main.zig:5:43: 0x11d721d in main (main.zig)
pub fn main(init: std.process.Init) !void {
^
/home/kilian/toolbox-local/zig/.zi/0.16.0/zig-x86_64-linux-0.16.0/lib/std/start.zig:737:30: 0x11d809e in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/kilian/toolbox-local/zig/.zi/0.16.0/zig-x86_64-linux-0.16.0/lib/std/start.zig:190:5: 0x11d7201 in _start (std.zig)
asm volatile (switch (native_arch) {
^
Abgebrochen (Speicherabzug geschrieben) /home/kilian/toolbox-local/zig/server-test/zig-out/bin/server
Expected Behavior
It doesn't crash.
### Zig Version
0.16.0
### Steps to Reproduce and Observed Behavior
I compiled and ran this program
```Zig
const std = @import("std");
pub const std_options: std.Options = .{ .log_level = .info };
pub fn main(init: std.process.Init) !void {
const io = init.io;
const ip: std.Io.net.IpAddress = .fromIp6(.unspecified(8888));
var server = try ip.listen(io, .{ .reuse_address = true });
defer server.deinit(io);
var group: std.Io.Group = .init;
defer group.cancel(io);
std.log.info("finished setup", .{});
const payload: [1024*1024*1024]u8 = @splat(5);
var counter: u64 = 0;
while (true) if (accept(io, &server)) |stream| {
group.async(io, handle, .{init.gpa, io, stream, payload});
counter += 1;
if (counter % 10 == 0) std.log.info("accepted {d} connections", .{counter});
};
}
fn accept(io: std.Io, server: *std.Io.net.Server) ?std.Io.net.Stream {
const connection = server.accept(io) catch |e| {
std.log.warn("accept failed: {t}", .{e});
return null;
};
std.log.debug("received connection", .{});
return connection;
}
fn handle(gpa: std.mem.Allocator, io: std.Io, stream: std.Io.net.Stream, payload: [1024*1024*1024]u8) void {
defer stream.close(io);
_ = payload;
_ = gpa;
const msg = "Hello World\n";
var buffer: [msg.len]u8 = undefined;
var writer = stream.writer(io, &buffer);
writer.interface.writeAll(msg) catch return;
writer.interface.flush() catch return;
stream.shutdown(io, .send) catch return;
io.sleep(.fromSeconds(1), .real) catch {};
}
```
which was build with this `build.zig` (command: `zig build`):
```Zig
const std = @import("std");
pub fn build(b: *std.Build) void {
const optimize = b.standardOptimizeOption(.{});
const target = b.standardTargetOptions(.{});
const mod = b.createModule(.{
.root_source_file = b.path("main.zig"),
.target = target,
.optimize = optimize,
});
const exe = b.addExecutable(.{
.name = "server",
.root_module = mod,
});
b.installArtifact(exe);
}
```
After running it with `zig-out/bin/server` on Linux x86_64, I got this output:
```
Segmentation fault at address 0x7fff05cf22d0
/home/kilian/toolbox-local/zig/server-test/main.zig:5:43: 0x11d721d in main (main.zig)
pub fn main(init: std.process.Init) !void {
^
/home/kilian/toolbox-local/zig/.zi/0.16.0/zig-x86_64-linux-0.16.0/lib/std/start.zig:737:30: 0x11d809e in callMain (std.zig)
return wrapMain(root.main(.{
^
/home/kilian/toolbox-local/zig/.zi/0.16.0/zig-x86_64-linux-0.16.0/lib/std/start.zig:190:5: 0x11d7201 in _start (std.zig)
asm volatile (switch (native_arch) {
^
Abgebrochen (Speicherabzug geschrieben) /home/kilian/toolbox-local/zig/server-test/zig-out/bin/server
```
### Expected Behavior
It doesn't crash.