AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 427207
Accepted
danglingpointer
danglingpointer
Asked: 2018-03-01 05:30:52 +0800 CST2018-03-01 05:30:52 +0800 CST 2018-03-01 05:30:52 +0800 CST

创建套接字文件是否需要 AF_INET?

  • 772

关于为AF_INET.

为了AF_UNIX在同一主机内通话,我们创建套接字文件示例/tmp/name_of_the_socket_file

怎么样AF_INET,它需要创建套接字文件吗?

AFAIK,我不需要创建套接字文件AF_INET,我可以与简单的客户端和服务器模型进行通信。

我的同事告诉我我需要为AF_INETIP地址作为文件名创建套接字文件,我不明白有人可以澄清我吗?

tcp socket
  • 1 1 个回答
  • 843 Views

1 个回答

  • Voted
  1. Best Answer
    user34720
    2018-03-01T05:50:44+08:002018-03-01T05:50:44+08:00

    我的同事告诉我我需要为AF_INET

    你的同事错了。看看bind(2)你的手册页可以看到不同的套接字类型有规则:

    名称绑定中使用的规则因地址族而异。有关详细信息,请参阅第 7 节中的手册条目。对于AF_INET,见ip(7);对于AF_INET6,见ipv6(7);对于AF_UNIX,见packet(7);对于AF_X25,见x25(7);对于AF_NETLINK,请参见netlink(7)。

    您将看到ip(7)没有涉及AF_INET可以创建文件的调用。还有一篇很棒的IBM 论文,介绍了这种套接字结构和一些关于它的历史。遗留结构形式(BSD 4.4/Unix 98):

    struct sockaddr_in {
      uint8_t         sin_len;
      sa_family_t     sin_family;
      u_short         sin_port;
      struct in_addr  sin_addr;
      char            sin_zero[8];
    };
    

    当前结构:

    struct sockaddr_in {
        sa_family_t    sin_family; /* address family: AF_INET */
        in_port_t      sin_port;   /* port in network byte order */
        struct in_addr sin_addr;   /* internet address */
    };
    
    /* Internet address. */
    struct in_addr {
        uint32_t       s_addr;     /* address in network byte order */
    };
    

    看,没有提到任何文件创建。

    引用手册页的其他部分ip(7)关于这种 socket( AF_INET) 的工作原理:

    当一个进程想要接收新的传入数据包或连接时,它应该使用 . 将套接字绑定到本地接口地址bind(2)。在这种情况下,只有一个 IP 套接字可以绑定到任何给定的本地(地址、端口)对。当INADDR_ANY在绑定调用中指定时,套接字将绑定到所有本地接口。在listen(2)未绑定的套接字上调用时,套接字会自动绑定到本地地址设置为的随机空闲端口INADDR_ANY。当 connect(2)在未绑定的套接字上调用时,套接字会自动绑定到随机空闲端口或本地地址设置为的可用共享端口INADDR_ANY。

    --剪辑--

    地址格式

    IP 套接字地址定义为 IP 接口 地址和 16 位端口号的组合。基本 IP 协议不提供端口号,它们由更高级别的协议实现,如 udp(7) 和 tcp(7)。在原始套接字上,sin_port 设置为 IP 协议。

    但是,如果您查看unix(7)手册页,您会看到一些AF_UNIX套接字类型及其基本结构的示例。甚至还有一个称为sun_path套接字文件路径的字段(请参阅下面的相关资料):

    #define UNIX_PATH_MAX    108
    
    struct sockaddr_un {
      sa_family_t sun_family;               /* AF_UNIX */
      char        sun_path[UNIX_PATH_MAX];  /* pathname */
    };
    

    tl,dr: AF_UNIX用于套接字(它们使用文件),而AF_INET用于绑定到 IP 地址,并以各种形式(单播、多播、广播......)创建通信。

    相关资料:

    • 解释 unix 域套接字的示例 - AF_INET 与 AF_UNIX
    • 为什么套接字路径长度限制为一百个字符?
    • 5

相关问题

  • 通过 TCP 构建 Unix 套接字桥

  • sudo netstat -antp 不显示 PID

  • 连接到 IP 0.0.0.0 成功。如何?为什么?

  • Linux中哪个进程负责TCP

  • 连接到远程 VM 的 Socket

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve