Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › compiler/ › Maker/ › WebServer.zig › accept
accept
WebServer.accept
fn accept (ws : *WebServer , stream : net .Stream ) void
File
Code
fn accept (ws : *WebServer , stream : net .Stream ) void {
const graph = ws .graph ;
const io = graph .io ;
defer {
// `undefined`, but it cannot do so since it is an immutable parameter.
var copy = stream ;
copy .close (io );
}
var send_buffer : [4096 ]u8 = undefined ;
var recv_buffer : [4096 ]u8 = undefined ;
var connection_reader = stream .reader (io , &recv_buffer );
var connection_writer = stream .writer (io , &send_buffer );
var server : http .Server = .init (&connection_reader .interface , &connection_writer .interface );
while (true ) {
var request = server .receiveHead () catch |err | switch (err ) {
error .HttpConnectionClosing => return ,
else => return log .err ("failed to receive http request: {t}" , .{err }),
};
switch (request .upgradeRequested ()) {
.websocket => |opt_key | {
const key = opt_key orelse return log .err ("missing websocket key" , .{});
var web_socket = request .respondWebSocket (.{ .key = key }) catch {
return log .err ("failed to respond web socket: {t}" , .{connection_writer .err .?});
};
ws .serveWebSocket (&web_socket ) catch |err | {
log .err ("failed to serve websocket: {t}" , .{err });
return ;
};
comptime unreachable ;
},
.other => |name | return log .err ("unknown upgrade request: {s}" , .{name }),
.none => {
ws .serveRequest (&request ) catch |err | switch (err ) {
error .AlreadyReported => return ,
else => {
log .err ("failed to serve '{s}': {t}" , .{ request .head .target , err });
return ;
},
};
},
}
}
}