[英]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.