Add some standard library examples.
parent
51e10d7f1e
commit
2bb06db137
|
@ -0,0 +1,49 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const testing = std.testing;
|
||||||
|
const net = std.net;
|
||||||
|
const fmt = std.fmt;
|
||||||
|
const mem = std.mem;
|
||||||
|
const print = std.debug.print;
|
||||||
|
|
||||||
|
fn disconnect(stream: *net.StreamServer) void { stream.close(); }
|
||||||
|
|
||||||
|
fn server_init() net.StreamServer {
|
||||||
|
// no reuse_address and default kernel_backlog
|
||||||
|
return net.StreamServer.init(.{});
|
||||||
|
}
|
||||||
|
|
||||||
|
fn waiting_for_connection(stream: *net.StreamServer
|
||||||
|
, path: []const u8) !net.StreamServer.Connection {
|
||||||
|
var address = try net.Address.initUnix(path);
|
||||||
|
try stream.listen(address);
|
||||||
|
return stream.accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn receive_msg(stream: net.Stream) !void {
|
||||||
|
var buffer: [1000]u8 = undefined;
|
||||||
|
var fbs = std.io.fixedBufferStream(&buffer);
|
||||||
|
var reader = fbs.reader();
|
||||||
|
|
||||||
|
var size = try stream.read(buffer[0..]);
|
||||||
|
print ("Received a message! Read {} bytes\n", .{size});
|
||||||
|
|
||||||
|
const msg_type = try reader.readByte();
|
||||||
|
const msg_len = try reader.readIntBig(u32);
|
||||||
|
const msg_payload = buffer[4..size];
|
||||||
|
print ("type: {}, len {}, content: {s}\n"
|
||||||
|
, .{msg_type, msg_len, msg_payload});
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() !u8 {
|
||||||
|
var path = "/tmp/.TEST_USOCK";
|
||||||
|
print("Init UNIX server to {s}...\n", .{path});
|
||||||
|
var stream = server_init();
|
||||||
|
print("Waiting for a connection...\n", .{});
|
||||||
|
var connection = try waiting_for_connection(&stream, path);
|
||||||
|
print("Someone is connected! Receiving a message...\n", .{});
|
||||||
|
try receive_msg(connection.stream);
|
||||||
|
print("Disconnection...\n", .{});
|
||||||
|
disconnect(&stream);
|
||||||
|
print("Disconnected!\n", .{});
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
const std = @import("std");
|
||||||
|
const testing = std.testing;
|
||||||
|
const net = std.net;
|
||||||
|
const fmt = std.fmt;
|
||||||
|
const mem = std.mem;
|
||||||
|
const print = std.debug.print;
|
||||||
|
|
||||||
|
fn disconnect(stream: net.Stream) void { stream.close(); }
|
||||||
|
|
||||||
|
fn connect(path: []const u8) !net.Stream {
|
||||||
|
return try net.connectUnixSocket(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn send_msg(stream: net.Stream) !usize {
|
||||||
|
var buffer: [1000]u8 = undefined;
|
||||||
|
var fbs = std.io.fixedBufferStream(&buffer);
|
||||||
|
var writer = fbs.writer();
|
||||||
|
|
||||||
|
try writer.writeByte(1); // DATA
|
||||||
|
|
||||||
|
const message = "hello everyone";
|
||||||
|
try writer.writeIntBig(u32, message.len);
|
||||||
|
_ = try writer.write(message);
|
||||||
|
|
||||||
|
return stream.write (fbs.getWritten());
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn main() !u8 {
|
||||||
|
var path = "/tmp/.TEST_USOCK";
|
||||||
|
print("Connection to {s}...\n", .{path});
|
||||||
|
var stream = try connect(path);
|
||||||
|
print("Connected! Sending a message...\n", .{});
|
||||||
|
const bytecount = try send_msg(stream);
|
||||||
|
print("Sent {} bytes! Disconnection...\n", .{bytecount});
|
||||||
|
disconnect(stream);
|
||||||
|
print("Disconnected!\n", .{});
|
||||||
|
return 0;
|
||||||
|
}
|
Reference in New Issue