部分Socket API简要说明,以备后续查看
目录
创建套接字 ( socket )
int socket(int domain, int type ,int protocol);
参数 | 描述 |
---|---|
domain | 协议族类型 |
type | 协议类型 |
protocol | 实际使用的传输层协议 |
返回 | – |
0 | 成功,返回一个代表套接字描述符的整数 |
1 | 失败 |
该函数用于根据指定的地址族、数据类型和协议来分配一个套接字描述符及其所使用的的资源。
domain / 协议族类型
- AF_INET: IPV4
- AF_INET6: IPV6
type / 协议类型
- SOCK_STREAM: 流式套接字
- SOCK_DGRAM: 数据报套接字
- SOCK_RAW: 原始套接字
绑定套接字 ( bind )
int bind(int sockfd, const struct sockaddr *name, socklen_t namelen);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
name | 指向sockaddr结构体的指针,代表要绑定的地址 |
namelen | sockaddr结构体的长度 |
返回 | – |
0 | 成功 |
1 | 失败 |
该函数用于将端口号和IP地址绑定在指定套接字上。
监听套接字 ( listen )
int listen(int sockfd, int backlog);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
backlog | 表示一次能等待的最大连接数目 |
返回 | – |
0 | 成功 |
1 | 失败 |
该函数用于TCP服务器监听指定套接字连接
接收连接 ( accept )
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
addr | 用来接受一个返回值,这返回值指定客户端的地址。如果对客户的地址不感兴趣,那么可以把这个值设置为NULL。 |
addrlen | 用来接受上述addr的结构的大小的,它指明addr结构所占有的字节个数。它也可以被设置为NULL。 |
返回 | – |
0 | 成功 |
1 | 失败 |
accept默认会阻塞进程,直到有一个客户连接建立后返回,它返回的是一个新可用的套接字,这个套接字是连接套接字。此时我们需要区分两种套接字,一种套接字正如accept的参数sockfd,它是监听套接字,在调用listen函数之后,一个套接字会从主动连接的套接字变身为一个监听套接字;而accept返回是一个连接套接字,它代表着一个网络已经存在的点点连接。自然要问的是:为什么要有两种套接字?原因很简单,如果使用一个描述字的话,那么它的功能太多,使得使用很不直观,同时在内核确实产生了一个这样的新的描述字。
建立连接 ( connect )
int connect(int sockfd, const struct sockaddr *name, socklen_t namelen);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
name | 服务器地址信息 |
namelen | 服务器地址结构体长度 |
返回 | – |
0 | 成功 |
1 | 失败 |
该函数用于建立与指定socket的连接
发送TCP数据 ( send )
int send(int sockfd, const void *dataptr, size_t size , int flags);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
dataptr | 发送的数据指针 |
size | 发送的数据长度 |
flags | 标志- |
返回 | – |
> 0 | 成功,返回发送数据长度 |
<= 0 | 失败 |
该函数常用于TCP连接发送数据
接收TCP数据 ( recv )
int recv(int sockfd, void *mem, size_t len , int flags);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
dataptr | 接收数据指针 |
len | 接收的数据长度 |
flags | 标志- |
返回 | – |
> 0 | 成功,返回接收的数据的长度 |
= 0 | 目标地址已传输完成并关闭连接 |
< 0 | 失败 |
该函数常用于TCP连接接收数据
发送UDP数据 ( sendto )
int sendto(int sockfd, const void *dataptr, size_t size , int flags, const struct sockaddr *to, socklen_t tolen);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
dataptr | 发送数据指针 |
size | 发送的数据长度 |
flags | 标志- |
to | 目标地址结构体指针 |
tolen | 目标地址结构体长度 |
返回 | – |
> 0 | 成功,返回发送数据长度 |
<= 0 | 失败 |
该函数常用于UDP连接发送数据
接收UDP数据 ( recvfrom )
int recvfrom(int sockfd, void *mem, size_t len , int flags, const struct sockaddr *from, socklen_t fromlen);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
mem | 接收数据指针 |
len | 接收的数据长度 |
flags | 标志- |
from | 接收地址结构体指针 |
fromlen | 接收地址结构体长度 |
返回 | – |
> 0 | 成功,返回接收的数据的长度 |
= 0 | 目标地址已传输完成并关闭连接 |
< 0 | 失败 |
该函数常用于UDP连接接收数据
关闭套接字 ( close )
int close(int sockfd);
参数 | 描述 |
---|---|
sockfd | 套接字描述符 |
返回 | – |
0 | 成功 |
-1 | 失败 |
该函数常用于UDP连接接收数据