套接字使用
优质
小牛编辑
137浏览
2023-12-01
套接字接口
结构体 | |
struct | fd_set |
文件句柄管理 更多... | |
类型定义 | |
typedef struct fd_set | fd_set |
文件句柄管理 | |
函数 | |
int | socket (int domain, int type, int protocol) |
创建套接字 | |
int | bind (int s, const struct sockaddr *name, socklen_t namelen) |
绑定套接字 | |
int | listen (int s, int backlog) |
监听套接字 | |
int | accept (int s, struct sockaddr *addr, socklen_t *addrlen) |
接收连接 | |
int | connect (int s, const struct sockaddr *name, socklen_t namelen) |
建立连接 | |
int | send (int s, const void *dataptr, size_t size, int flags) |
TCP 数据发送 | |
int | recv (int s, void *mem, size_t len, int flags) |
TCP 数据接收 | |
int | sendto (int s, const void *dataptr, size_t size, int flags, const struct sockaddr *to, socklen_t tolen) |
UDP 数据发送 | |
int | recvfrom (int s, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) |
UDP 数据接收 | |
int | closesocket (int s) |
关闭套接字 | |
int | shutdown (int s, int how) |
按设置关闭套接字 | |
int | setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen) |
设置套接字选项 | |
int | getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen) |
获取套接字选项 | |
int | getpeername (int s, struct sockaddr *name, socklen_t *namelen) |
获取远端地址信息 | |
int | getsockname (int s, struct sockaddr *name, socklen_t *namelen) |
获取本地地址信息 | |
int | ioctlsocket (int s, long cmd, void *arg) |
配置套接字参数 | |
详细描述
套接字接口
函数说明
int socket | ( | int | domain, |
int | type, | ||
int | protocol | ||
) |
创建套接字
该函数用于根据指定的地址族、数据类型和协议来分配一个套接字描述符及其所用的资源。
- 参数
domain 协议族 type 协议类型 protocol 实际使用的运输层协议
- 返回
- 成功,返回一个代表套接字描述符的整数;失败返回 -1。
- 示例:
- tcpclient_sample.c, tcpclient_select_sample.c, tcpserver_sample.c, udpclient_sample.c , 以及 udpserver_sample.c.
int bind | ( | int | s, |
const struct sockaddr * | name, | ||
socklen_t | namelen | ||
) |
绑定套接字
用于将端口号和 IP 地址绑定带指定套接字上。当使用 socket() 创造一个套接字时, 只是给定了协议族,并没有分配地址,在套接字接收来自其他主机的连接前,必须用 bind() 给它绑定一个地址和端口号。
- 参数
s 套接字描述符 name 指向sockaddr结构体的指针,代表要绑定的地址 namelen sockaddr结构体的长度
- 返回
- 0 成功;-1 失败。
- 示例:
- tcpserver_sample.c , 以及 udpserver_sample.c.
int listen | ( | int | s, |
int | backlog | ||
) |
监听套接字
该函数用于TCP服务器监听指定套接字连接。
- 参数
s 套接字描述符 backlog 表示一次能够等待的最大连接数目
- 返回
- 0 成功;-1 失败。
int accept | ( | int | s, |
struct sockaddr * | addr, | ||
socklen_t * | addrlen | ||
) |
接收连接
当应用程序监听来自其他主机的连接时,使用该函数初始化连接,accept()为每个 连接创立新的套接字并从监听队列中移除这个连接。
- 参数
s 套接字描述符 addr 客户端设备地址信息 addrlen 客户端设备地址结构体的长度
- 返回
- 成功,返回新创建的套接字描述符;失败返回 -1。
int connect | ( | int | s, |
const struct sockaddr * | name, | ||
socklen_t | namelen | ||
) |
建立连接
该函数用于建立与指定socket的连接。
- 参数
s 套接字描述符 name 服务器地址信息 namelen 服务器地址结构体的长度
- 返回
- 0 成功;-1 失败。
int send | ( | int | s, |
const void * | dataptr, | ||
size_t | size, | ||
int | flags | ||
) |
TCP 数据发送
- 参数
s 套接字描述符 dataptr 要发送的数据指针 size 发送的数据长度 flags 标志,一般为0
- 返回
- 大于0 成功,返回发送的数据的长度;小于等于0 失败。
int recv | ( | int | s, |
void * | mem, | ||
size_t | len, | ||
int | flags | ||
) |
TCP 数据接收
- 参数
s 套接字描述符 mem 接收的数据指针 len 接收的数据长度 flags 标志,一般为0
- 返回
- 大于0 成功,返回接收的数据的长度;等于0 表示目标地址已传输完并关闭连接;小于0 失败。
int sendto | ( | int | s, |
const void * | dataptr, | ||
size_t | size, | ||
int | flags, | ||
const struct sockaddr * | to, | ||
socklen_t | tolen | ||
) |
UDP 数据发送
- 参数
s 套接字描述符 dataptr 发送的数据指针 size 发送的数据长度 flags 标志,一般为0 to 目标地址结构体指针 tolen 目标地址结构体长度
- 返回
- 大于0 成功,返回发送的数据的长度;小于等于0 失败。
int recvfrom | ( | int | s, |
void * | mem, | ||
size_t | len, | ||
int | flags, | ||
struct sockaddr * | from, | ||
socklen_t * | fromlen | ||
) |
UDP 数据接收
- 参数
s 套接字描述符 mem 接收的数据指针 len 接收的数据长度 flags 标志,一般为0 from 接收地址结构体指针 fromlen 接收地址结构体长度
- 返回
- 大于0 成功,返回接收的数据的长度;等于0 接收地址已传输完并关闭连接;小于0 失败。
int closesocket | ( | int | s | ) |
关闭套接字
- 参数
s 套接字描述符
- 返回
- 0 成功;-1 失败。
- 示例:
- tcpclient_sample.c, tcpclient_select_sample.c, tcpserver_sample.c, udpclient_sample.c , 以及 udpserver_sample.c.
int shutdown | ( | int | s, |
int | how | ||
) |
按设置关闭套接字
- 参数
s 套接字描述符 how 套接字控制的方式
- 返回
- 0 成功;-1 失败。
int setsockopt | ( | int | s, |
int | level, | ||
int | optname, | ||
const void * | optval, | ||
socklen_t | optlen | ||
) |
设置套接字选项
- 参数
s 套接字描述符 level 协议栈配置选项 optname 需要设置的选项名 optval 获取选项值的缓冲区地址 optlen 获取选项值的缓冲区长度地址
- 返回
- 0 成功;小于0 失败。
int getsockopt | ( | int | s, |
int | level, | ||
int | optname, | ||
void * | optval, | ||
socklen_t * | optlen | ||
) |
获取套接字选项
- 参数
s 套接字描述符 level 协议栈配置选项 optname 需要设置的选项名 optval 获取选项值的缓冲区地址 optlen 获取选项值的缓冲区长度地址
- 返回
- 0 成功;小于0 失败。
int getpeername | ( | int | s, |
struct sockaddr * | name, | ||
socklen_t * | namelen | ||
) |
获取远端地址信息
- 参数
s 套接字描述符 name 接收信息的地址结构体指针 namelen 接收信息的地址结构体长度
- 返回
- 0 成功;小于0 失败。
int getsockname | ( | int | s, |
struct sockaddr * | name, | ||
socklen_t * | namelen | ||
) |
获取本地地址信息
- 参数
s 套接字描述符 name 接收信息的地址结构体指针 namelen 接收信息的地址结构体长度
- 返回
- 0 成功;小于0 失败。
int ioctlsocket | ( | int | s, |
long | cmd, | ||
void * | arg | ||
) |
配置套接字参数
- 参数
s 套接字描述符 cmd 套接字操作命令 arg 操作命令所带参数
- 返回
- 0 成功;小于0 失败。