套接字使用

优质
小牛编辑
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 sockaddrname,
socklen_t namelen 
)

绑定套接字

用于将端口号和 IP 地址绑定带指定套接字上。当使用 socket() 创造一个套接字时, 只是给定了协议族,并没有分配地址,在套接字接收来自其他主机的连接前,必须用 bind() 给它绑定一个地址和端口号。

参数
s套接字描述符
name指向sockaddr结构体的指针,代表要绑定的地址
namelensockaddr结构体的长度
返回
0 成功;-1 失败。
示例:
tcpserver_sample.c , 以及 udpserver_sample.c.
int listen(int s,
int backlog 
)

监听套接字

该函数用于TCP服务器监听指定套接字连接。

参数
s套接字描述符
backlog表示一次能够等待的最大连接数目
返回
0 成功;-1 失败。
示例:
tcpserver_sample.c.
int accept(int s,
struct sockaddraddr,
socklen_t * addrlen 
)

接收连接

当应用程序监听来自其他主机的连接时,使用该函数初始化连接,accept()为每个 连接创立新的套接字并从监听队列中移除这个连接。

参数
s套接字描述符
addr客户端设备地址信息
addrlen客户端设备地址结构体的长度
返回
成功,返回新创建的套接字描述符;失败返回 -1。
示例:
tcpserver_sample.c.
int connect(int s,
const struct sockaddrname,
socklen_t namelen 
)

建立连接

该函数用于建立与指定socket的连接。

参数
s套接字描述符
name服务器地址信息
namelen服务器地址结构体的长度
返回
0 成功;-1 失败。
示例:
tcpclient_sample.c , 以及 tcpclient_select_sample.c.
int send(int s,
const void * dataptr,
size_t size,
int flags 
)

TCP 数据发送

参数
s套接字描述符
dataptr要发送的数据指针
size发送的数据长度
flags标志,一般为0
返回
大于0 成功,返回发送的数据的长度;小于等于0 失败。
示例:
tcpclient_sample.c, tcpclient_select_sample.c , 以及 tcpserver_sample.c.
int recv(int s,
void * mem,
size_t len,
int flags 
)

TCP 数据接收

参数
s套接字描述符
mem接收的数据指针
len接收的数据长度
flags标志,一般为0
返回
大于0 成功,返回接收的数据的长度;等于0 表示目标地址已传输完并关闭连接;小于0 失败。
示例:
tcpclient_sample.c, tcpclient_select_sample.c , 以及 tcpserver_sample.c.
int sendto(int s,
const void * dataptr,
size_t size,
int flags,
const struct sockaddrto,
socklen_t tolen 
)

UDP 数据发送

参数
s套接字描述符
dataptr发送的数据指针
size发送的数据长度
flags标志,一般为0
to目标地址结构体指针
tolen目标地址结构体长度
返回
大于0 成功,返回发送的数据的长度;小于等于0 失败。
示例:
udpclient_sample.c.
int recvfrom(int s,
void * mem,
size_t len,
int flags,
struct sockaddrfrom,
socklen_t * fromlen 
)

UDP 数据接收

参数
s套接字描述符
mem接收的数据指针
len接收的数据长度
flags标志,一般为0
from接收地址结构体指针
fromlen接收地址结构体长度
返回
大于0 成功,返回接收的数据的长度;等于0 接收地址已传输完并关闭连接;小于0 失败。
示例:
udpserver_sample.c.
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 sockaddrname,
socklen_t * namelen 
)

获取远端地址信息

参数
s套接字描述符
name接收信息的地址结构体指针
namelen接收信息的地址结构体长度
返回
0 成功;小于0 失败。
int getsockname(int s,
struct sockaddrname,
socklen_t * namelen 
)

获取本地地址信息

参数
s套接字描述符
name接收信息的地址结构体指针
namelen接收信息的地址结构体长度
返回
0 成功;小于0 失败。
int ioctlsocket(int s,
long cmd,
void * arg 
)

配置套接字参数

参数
s套接字描述符
cmd套接字操作命令
arg操作命令所带参数
返回
0 成功;小于0 失败。