繁体   English   中英

获取创建了一个socket的socket的Unix socket路径

[英]Get Unix socket path of socket, which created one socket

我需要检查 /proc/%pid/fd/%n 下的某些文件描述是否指向由(例如) /run/user/%n/my_socket 创建的套接字。 我尝试使用 O_PATH 打开一个套接字,但打开返回(在某些情况下)fd 高于 -1 和(在其他情况下)-1。 此外,当传递良好的 fd(高于 0)时,getsockname 也会失败。

这是我的代码:

int sock = -1;
 
if (S_ISSOCK(stat_.st_mode)) {
  
  sock = open(path,  O_PATH);
}

if (-1 != sock) {
  if (-1 == getsockname(sock, socket_, &len)) {
  
    if (errno == EBADF) {
    
      puts("BAD FD");
      return false;
    }
    perror("Error while obtaining data about socket");
    exit(1);
  }
  else puts("OKI - this is socket");
  
  if (socket_->sa_family == AF_UNIX)
    puts(socket_->sa_data);
}

重要信息:我知道,当服务器创建一个套接字时,它仅用于侦听新连接。 当客户端连接时,会创建新的套接字来与之对话。 所以我的问题是:如何从先前的套接字生成的套接字中获取先前的套接字。

很抱歉回答我自己的问题,但我找到了解决方案。

对 /proc/%n/fd 中的符号链接使用 readlink 。 如果它有特殊格式,我们可以将其解析为 unix socket 的编号。 在下一步中读取整个 /proc/net/unix 文件并搜索从符号链接获得的数字。 如果找到,请检查路径。 现在,我必须搜索方法来解析符号链接和 /proc/net/unix 文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM