You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Zig中进行Socket编程?相关函数参数取值存疑

Zig Socket 编程参数详解与示例

1. 创建Socket的参数对应

Zig的std.os.socket()参数和Pythonsocket.socket()一一对应,相关常量都归类在std.os的嵌套命名空间中:

  • domain参数:对应地址族,IPv4用std.os.AF.INET,IPv6用std.os.AF.INET6
  • socket_type参数:对应套接字类型,TCP流用std.os.SOCK.STREAM,UDP数据报用std.os.SOCK.DGRAM
  • protocol参数:一般传0,让系统自动选择对应类型的默认协议(TCP/UDP)

2. std.os.bind() 参数说明

  • sock:std.os.socket()返回的套接字文件描述符
  • addr:需传入对应地址族的结构体,以IPv4为例用std.os.sockaddr_in,需手动填充字段:
    • sin_family:设为std.os.AF.INET
    • sin_port:用std.os.htons()将主机字节序的端口转为网络字节序
    • sin_addr:用std.os.in_addr{ .s_addr = std.os.htonl(std.os.INADDR_ANY) }绑定到所有可用网卡
  • len:addr结构体的字节长度,直接用@sizeOf(@TypeOf(addr))获取

3. std.os.accept() 参数说明

  • sock:已调用std.os.listen()后的监听套接字描述符
  • addr:传入std.os.sockaddr类型指针,用于存储客户端的地址信息
  • addr_size:传入*u32类型变量,初始值设为@sizeOf(@TypeOf(addr.*)),函数会修改它为实际地址长度
  • flags:一般传0,无需额外标志

完整TCP服务器示例

const std = @import("std");
const os = std.os;

pub fn main() !void {
    // 创建TCP套接字
    const sock = try os.socket(os.AF.INET, os.SOCK.STREAM, 0);
    defer os.close(sock);

    // 设置端口快速重用选项
    const optval: c_int = 1;
    try os.setsockopt(sock, os.SOL.SOCKET, os.SO.REUSEADDR, &optval, @sizeOf(c_int));

    // 绑定地址与端口
    var addr = os.sockaddr_in{
        .sin_family = os.AF.INET,
        .sin_port = try os.htons(8080),
        .sin_addr = os.in_addr{ .s_addr = os.htonl(os.INADDR_ANY) },
        .pad = undefined,
    };
    try os.bind(sock, @ptrCast(*os.sockaddr, &addr), @sizeOf(os.sockaddr_in));

    // 开始监听连接
    try os.listen(sock, 10);

    // 接受客户端连接
    var client_addr: os.sockaddr = undefined;
    var client_addr_len: u32 = @sizeOf(os.sockaddr);
    const client_sock = try os.accept(sock, &client_addr, &client_addr_len, 0);
    defer os.close(client_sock);

    std.debug.print("Accepted connection from client\n", .{});
}

内容的提问来源于stack exchange,提问作者Pexicade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 21:08:10