📄 一句话概括
socket() 只做三件事:划一块控制信息内存、写初始状态、分配描述符交回——此时还没跟任何服务器搭上关系。
📝 本节和前面几节的关系
2.1.2 看了实体长什么样;本篇看【创建】这步到底动了什么。
一、三连动作
① 划一块内存写初始控制信息(状态=空); ② 分配一个描述符(接着上次的号往下发); ③ 把号交回应用程序。
二、此刻的位置
管子只建了本端这头——对面是谁还不知道。 这也解释了为什么创建后必须 connect:不接通,写不进数据。
三、动手 Demo:调用 socket 时发生的事
三步清单:
for s in ['1. 划一块内存 -> 初始控制信息(状态=空)',
'2. 分配一个描述符 -> 3',
'3. 描述符交回应用程序']:
print(s)
实跑输出:
--------------------------------------------------------------------
调用 socket 时发生的事
--------------------------------------------------------------------
socket() 一步的三连动作:
1. 划一块内存 -> 写入初始控制信息(状态=空)
2. 分配一个描述符 -> 3
3. 把描述符交回应用程序
此时还没跟任何服务器搭上关系——管道两头的口,
只建好了本端这一头。下一阶段 connect 才把另一头接上。
描述符从 3 起步(0/1/2 是标准输入输出错误流), 每开一个递增一号。
30 秒实验
- 写一行 Python 连开三个 socket,打印它们的 fileno()。
- 创建后立刻 send 看会怎样(报未连接)。
- 数数一次网页访问总共创建几个套接字。
常见误区
- 以为 socket() 已经连上服务器——它只建本端口。
- 以为描述符从 0 开始——0/1/2 被标准流占了。
自测三问(点开对答案)
1. socket() 的三个动作是什么? —— 划内存、写初始状态、分配描述符。 2. 创建完能直接 write 吗? —— 不能,还没 connect。 3. 此时控制信息里的对端地址是什么? —— 还空着。- ☐ 下一节(2.2.1 连接是什么意思)
相关笔记
- 连接是什么意思 —— 下一阶段补全另一半
- 套接字的实体就是通信控制信息 —— 实体细看
- 🔌 网络是怎样连接的 · 索引