#include <sys/socket.h>
int socket(int domain, int type, int protocol);
成功时返回文件描述符,失败时返回 -1
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
- domain: AF_INET, AF_INET6
- type: SOCK_STREAM (TCP), SOCK_DGRAM (UDP)
- protocol: 0, 使用默认实现
文件描述符:
- 0: stdin
- 1: stdout
- 2: stderr
服务器监听原理:
- 创建文件描述符
- 绑定 ip? 与 port
- 开始 listen
1 0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
2 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
3 +0 bind(3, ..., ...) = 0
4 +0 listen(3, 1) = 0
5
6 //TCP three-way handshake
7 +0 < S 0:0(0) win 4000 <mss 1000>
8 +0 > S. 0:0(0) ack 1 <...>
9 +.1 < . 1:1(0) ack 1 win 1000
10
11 +0 accept(3, ..., ...) = 4
12 +0 < P. 1:201(200) win 4000
13 +0 > . 1:1(0) ack 201
<
向内核注入数据>
期待响应后面的数据
第七行含义:
- syn 包
- 起始 seq
- 结束 seq
- 包长度
- 窗口大小
- mss