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

获取Windows平台上通过Unix Socket连接的进程ID

Windows平台获取已连接Unix Socket进程ID的方法

Windows从10版本1709开始原生支持AF_UNIX套接字,但没有提供和Linux/Darwin平台getsockopt()完全对等的接口来直接获取连接进程ID,不过可以通过以下两种方式实现:

  • 原生AF_UNIX套接字方案
    当AF_UNIX套接字建立连接后,调用WSAIoctl函数,传入SIO_GET_BASIC_INFO作为控制码,从返回的WSABASIC_INFO结构体中提取ProcessId字段,该字段即为对等连接进程的ID。示例代码片段如下:

    WSABASIC_INFO basicInfo = {0};
    DWORD bytesReturned = 0;
    int result = WSAIoctl(
        sockfd,
        SIO_GET_BASIC_INFO,
        NULL,
        0,
        &basicInfo,
        sizeof(basicInfo),
        &bytesReturned,
        NULL,
        NULL
    );
    if (result != SOCKET_ERROR) {
        DWORD peerPid = basicInfo.ProcessId;
        // 使用peerPid进行后续操作
    }
    
  • 旧版本兼容的命名管道方案
    在Windows原生支持AF_UNIX之前,不少场景用命名管道模拟Unix套接字行为。这种情况下,可直接调用GetNamedPipeClientProcessId函数,获取连接到命名管道的客户端进程ID。

需要注意的是,SIO_GET_BASIC_INFO仅适用于Windows 10 1709及以上版本的原生AF_UNIX套接字,且调用进程需具备足够权限才能读取对等进程的ID。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:15:33