1 套接口简介

文章目录

  • 1.2 理解套接口
    • 1.2.1定义套接口
    • 1.2.2使用簍接口
    • 1.2.3引用套接口

1.2 理解套接口

1.2.1定义套接口

  • 用电话与他人联系时,
    • 你须拿起听筒,
    • 拨对方的号码
    • 等待对方应答
  • 双方通话时,
    • 就建一个具有两个端点的通信线路
    • 这两个端点是
    • 你的电话
    • 对方的电话(在对方的位置处)

  • 双方通信与通信的两个端点和它们之间的通信线路有关
  • 图1.2
    • 用两个电话作为端点,并通过电话网互相连接
1 套接口简介_第1张图片

  • Linux中套接口与电话相似。
  • 套接口代表通信线路中的端点,而端点之间就是数据通信网络。

  • 当你给某人打电话时,你拨叫的是对方用户的电话号码。
  • 套接口中的网络地址相当于号码
  • 程序中指定远程套接口的地址,就可建立从本地套接口到远程套接口的通信。
  • 套接口地址在第二章“域和地址族”讨论

  • 实际一个套接口仅是通信中的一个端点。
  • Linux提供很多函数调用来操作套接口
    • 都本书介绍

1.2.2使用簍接口

  • 套接口需要一整套专用的函数来操作,
    • 读者可能认为套接口非常特殊
  • 套接口确实有一些特殊地方
  • 实际上,它同文件描述符相似

1 套接口简介_第2张图片

  • 用open(2)打开一个文件,如果调用成功, Linux系统将返回一个文件描述符。
  • 程序就可用这个文件描述符对已打开的文件read(2)、 write(2)、 Iseek(2)和 close(②)等操作。

  • 套接口创建后,就如同一个文件描述符。
  • 我们可用同样的文件I/O函数,来对读、写和关闭
  • 第十五章“使用守护进程inetd”中,
    • 学习用套接口作为标准输入(文件描述符0)、
    • 标准输出(文件描述符1)、
    • 标准错误(文件描述符2)

1 套接口简介_第3张图片

  • 套接口和已打开的文件之间差别:
  • 不能在套接口上调用函数lseek(2)(也适用于管道)
  • 套接口可和网络地址关联,文件和管道不能
  • 套接口有很多能够通过 ioctl(2)査询和设置的选项。
  • 套接口必须在正确的状态下才能实现输入和输出,
    • 已打开文件任何时候都可读或写

1.2.3引用套接口

  • open(2)打开一个新文件,
    • Linux内核返一个文件描述符,
    • 是系统当前可用的,且数值最小的描述符,
  • 是0,或一正整数
  • 有些系统中,也称句柄

1 套接口简介_第4张图片

  • 设程序已打开标准输入(文件描述符0)、标准输出(文件描述符1)和标准错误(文件2)
  • 然后(注意内核是如何分配文件描述符):
  • (1)open(2)打开一文件
  • (2)内核返文件描述符3,并指向打开文件。
    • 3是目前尚未用的且最小的描述符
  • (3)用适当的函数调用(下文介绍)创一个新套接口
  • (4)基于与(2)
    • 内核为该套接口返回文件描述符4
  • (5)再次调open(2),打开另一文件
  • (6)内核返回文件描述符5,并指向该文件

  • 内核分配文件描述符时
    • 不区分这个描述符是分配给套接口
    • 还是分配给一个已打开的文件
  • 对程序员
    • 意味使用套接口与使用已打开文件是一样的
  • 能够通过文件描述符来交替地引用文件和套接口
  • read(2)和 write(2)这样函数,既可操作文件,也可操作套接口

你可能感兴趣的:(kinux,socket编程)