$darkmode
提供网络通信与协议栈相关的接口,支持多种网络协议和配置管理 更多...
函数 | |
int | socket (int domain, int type, int protocol) |
创建网络套接字 更多... | |
int | connect (int s, const struct sockaddr *name, socklen_t namelen) |
发起套接字连接请求 更多... | |
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 | send (int s, const void *dataptr, size_t size, int flags) |
在已连接的套接字上发送数据 更多... | |
int | recv (int s, void *mem, size_t len, int flags) |
从已连接的套接字接收数据 更多... | |
int | sendto (int s, const void *dataptr, size_t size, int flags, const struct sockaddr *to, socklen_t tolen) |
使用未连接的套接字向指定地址发送数据 更多... | |
int | recvfrom (int s, void *mem, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) |
使用未连接的套接字从指定地址接收数据 更多... | |
int | closesocket (int s) |
关闭一个套接字 更多... | |
int | getsockopt (int s, int level, int optname, void *optval, socklen_t *optlen) |
获取套接字选项 更多... | |
int | setsockopt (int s, int level, int optname, const void *optval, socklen_t optlen) |
设置套接字选项 更多... | |
int | getaddrinfo (const char *nodename, const char *servname, const struct addrinfo *hints, struct addrinfo **res) |
获取主机和服务的地址信息 更多... | |
void | freeaddrinfo (struct addrinfo *ai) |
释放由 getaddrinfo 分配的 addrinfo 结构体链表内存 更多... | |
int | shutdown (int s, int how) |
关闭套接字的部分或全部通信(半关闭) 更多... | |
int | recvmsg (int send, struct msghdr *message, int flags) |
从套接字接收消息。 更多... | |
int | sendmsg (int s, const struct msghdr *message, int flags) |
在套接字上发送消息 更多... | |
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) |
控制套接字的 I/O 模式 更多... | |
int | socketpair (int domain, int type, int protocol, int *fds) |
创建一对已连接的套接字 更多... | |
struct hostent * | gethostbyname (const char *name) |
根据主机名获取主机信息 更多... | |
int | gethostbyname_r (const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop) |
线程安全地通过主机名获取主机信息 更多... | |
int | select (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) |
[in] 同步 I/O 复用:在一组文件描述符上复用输入/输出操作。 更多... | |
提供网络通信与协议栈相关的接口,支持多种网络协议和配置管理
int socket | ( | int | domain, |
int | type, | ||
int | protocol | ||
) |
创建网络套接字
此函数用于创建套接字,并返回网络通信的文件描述符。 创建的套接字可用于绑定、监听、接收和发送数据等操作
[in] | domain | 通信协议族(地址族),定义套接字所使用的协议。常见取值包括:
| ||||||||
[in] | type | 套接字类型,决定数据传输的特性。常见取值包括:
| ||||||||
[in] | protocol | 指定套接字所使用的协议。通常设置为 0, 由系统自动选择默认协议:
|
>=0 | 成功,返回文件描述符 |
-1 | 失败 |
int connect | ( | int | s, |
const struct sockaddr * | name, | ||
socklen_t | namelen | ||
) |
发起套接字连接请求
此函数用于将由 s 指定的套接字连接到由 name 指定的服务器地址。 套接字必须先通过 socket() 创建,对于某些类型的套接字,可能需要在调用 connect() 前 ,使用 bind() 绑定到本地地址
[in] | s | 要连接的套接字文件描述符 |
[in] | name | 指向 sockaddr 结构的指针,指定服务器的目标地址。 具体结构类型(如 IPv4 使用 sockaddr_in)取决于地址族。 |
[in] | namelen | name 指向的地址结构的长度(字节数) |
0 | 连接成功 |
-1 | 连接失败 |
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 | ||
) |
在监听套接字上接受一个传入的连接
此函数从由 s 指定的监听套接字的待处理连接队列中提取第一个连接请求, 并为该连接创建一个新的套接字
[in] | s | 监听套接字的文件描述符 |
[out] | addr | 一个指向 sockaddr 结构的指针,该结构将接收连接实体的地址。 |
[out] | addrlen | 一个指向包含 addr 大小的变量的指针。当函数返回时, 此变量将保存实际返回的地址大小 |
>=0 | 返回已接受连接的新文件描述符 |
-1 | 失败 |
int send | ( | int | s, |
const void * | dataptr, | ||
size_t | size, | ||
int | flags | ||
) |
在已连接的套接字上发送数据
此函数用于在指定的文件描述符 s 所代表的已连接套接字上发送数据。 通常用于面向连接的协议(如 TCP)
[in] | s | 要发送数据的套接字文件描述符,该套接字必须已连接到远程端点 | ||||||||
[in] | dataptr | 指向包含待发送数据的缓冲区的指针 | ||||||||
[in] | size | 要从缓冲区发送的数据字节数 | ||||||||
[in] | flags | 指定发送操作的行为。常用标志包括:
|
>0 | 成功,返回已发送的字节数 |
-1 | 失败, |
0 | 远程端关闭连接 |
int recv | ( | int | s, |
void * | mem, | ||
size_t | len, | ||
int | flags | ||
) |
从已连接的套接字接收数据
此函数从已连接的套接字读取数据,并将其存储到指定的缓冲区中。 通常用于面向连接的协议(如 TCP)
[in] | s | 要接收数据的已连接套接字的文件描述符 | ||||||||
[out] | mem | 指向用于存放接收数据的缓冲区的指针 | ||||||||
[in] | len | 缓冲区可接收的最大字节数 | ||||||||
[in] | flags | 指定接收操作的行为。常用标志包括:
|
>0 | 成功时返回实际接收到的字节数 |
-1 | 失败 |
0 | 表示远程端已关闭连接 |
int sendto | ( | int | s, |
const void * | dataptr, | ||
size_t | size, | ||
int | flags, | ||
const struct sockaddr * | to, | ||
socklen_t | tolen | ||
) |
使用未连接的套接字向指定地址发送数据
此函数通常用于无连接协议(如 UDP),通过 to 参数指定目标地址,将数据发送到特定目的地
[in] | s | 要发送数据的套接字文件描述符 | ||||||||
[in] | dataptr | 指向待发送数据缓冲区的指针 | ||||||||
[in] | size | 要发送的数据字节数 | ||||||||
[in] | flags | 指定发送操作的行为。常用标志包括:
| ||||||||
[in] | to | 指向 sockaddr 结构的指针,指定目标地址 结构类型根据地址族不同而不同(如 IPv4 使用 sockaddr_in)。 | ||||||||
[in] | tolen | to 指向的地址结构的长度(字节数) |
>=0 | 成功,返回已发送的字节数 |
-1 | 失败 |
int recvfrom | ( | int | s, |
void * | mem, | ||
size_t | len, | ||
int | flags, | ||
struct sockaddr * | from, | ||
socklen_t * | fromlen | ||
) |
使用未连接的套接字从指定地址接收数据
此函数从套接字读取数据,并将其存储到指定的缓冲区中。通常用于无连接协议(如 UDP), 可从特定源地址接收数据
[in] | s | 要接收数据的套接字文件描述符 | ||||||||
[out] | mem | 指向用于存放接收数据的缓冲区的指针 | ||||||||
[in] | len | 缓冲区可接收的最大字节数 | ||||||||
[in] | flags | 指定接收操作的行为。常用标志包括:
| ||||||||
[out] | from | 指向 sockaddr 结构的指针,该结构将被填充为发送方的地址。 这是数据来源的地址 | ||||||||
[in,out] | fromlen | 指向变量的指针,初始时包含 from 结构的大小, 返回时将保存实际返回的地址大小 |
>0 | 成功时返回实际接收到的字节数 |
-1 | 失败 |
0 | 表示远程端已关闭连接 |
int closesocket | ( | int | s | ) |
关闭一个套接字
此函数关闭由文件描述符 s 指定的套接字。关闭后,该套接字不能再用于通信。 任何尚未传输的数据可能会丢失
[in] | s | 要关闭的套接字文件描述符 |
0 | 关闭成功 |
-1 | 关闭失败 |
int getsockopt | ( | int | s, |
int | level, | ||
int | optname, | ||
void * | optval, | ||
socklen_t * | optlen | ||
) |
获取套接字选项
此函数用于获取由文件描述符 s 指定的套接字的当前选项值。 选项由 level 和 optname 参数指定。
[in] | s | 要获取选项的套接字文件描述符 | ||||||||
[in] | level | 选项所在的协议层。常见取值包括:
| ||||||||
[in] | optname | 要获取的选项名称。常见选项包括:
| ||||||||
[out] | optval | 指向用于存放选项值的缓冲区指针,缓冲区需足够大以容纳选项值 | ||||||||
[in,out] | optlen | 指向变量的指针,初始时为 optval 缓冲区大小, 返回时为实际返回的选项值大小 |
0 | 成功 |
-1 | 失败 |
int setsockopt | ( | int | s, |
int | level, | ||
int | optname, | ||
const void * | optval, | ||
socklen_t | optlen | ||
) |
设置套接字选项
此函数用于为由文件描述符 s 指定的套接字设置特定选项。 套接字选项影响套接字的行为,通过 level 和 optname 参数指定
[in] | s | 要设置选项的套接字文件描述符 | ||||||||
[in] | level | 选项所在的协议层。常见取值包括:
| ||||||||
[in] | optname | 要设置的选项名称。常见选项包括:
| ||||||||
[in] | optval | 指向包含要设置值的缓冲区指针。缓冲区类型取决于具体选项 | ||||||||
[in] | optlen | optval 缓冲区的大小(字节数) |
0 | 设置成功 |
-1 | 设置失败 |
int getaddrinfo | ( | const char * | nodename, |
const char * | servname, | ||
const struct addrinfo * | hints, | ||
struct addrinfo ** | res | ||
) |
获取主机和服务的地址信息
此函数根据给定的主机名(nodename)和服务名(servname),以及可选的查询条件(hints), 获取对应的地址信息,并通过 res 返回结果链表
[in] | nodename | 主机名,可以是域名或IP地址字符串,若为NULL则表示本地地址 |
[in] | servname | 服务名,可以是端口号字符串或服务名称,若为NULL则不指定服务 |
[in] | hints | 指向 addrinfo 结构体的指针,用于指定查询条件,可为NULL |
[out] | res | 指向结果链表头指针的指针,函数成功时会分配并返回地址信息链表 |
0 | 成功 |
-1 | 失败 |
void freeaddrinfo | ( | struct addrinfo * | ai | ) |
释放由 getaddrinfo 分配的 addrinfo 结构体链表内存
此函数用于释放通过 getaddrinfo 获取的 addrinfo 结构体及其相关的所有内存资源
[in] | ai | 指向需要释放的 addrinfo 结构体链表的指针 |
int shutdown | ( | int | s, |
int | how | ||
) |
关闭套接字的部分或全部通信(半关闭)
此函数根据 how 参数的取值,禁用指定套接字的进一步发送或接收操作。 注意,该函数不会关闭套接字本身,仍需调用 close() 或 closesocket() 彻底关闭
[in] | s | 要进行关闭操作的套接字文件描述符 | ||||||||
[in] | how | 指定关闭的类型,可取以下值:
|
0 | 操作成功 |
-1 | 操作失败 |
int recvmsg | ( | int | send, |
struct msghdr * | message, | ||
int | flags | ||
) |
从套接字接收消息。
recvmsg() 函数从套接字 s 接收数据,并将其存储到由 msghdr 结构描述的缓冲区中。 该函数支持复杂的数据结构,包括多个数据缓冲区和可选的控制信息(辅助数据)
[in] | s | 要接收数据的套接字文件描述符 | ||||||||||||||||
[out] | message | 指向 msghdr 结构的指针,用于存放接收的数据和相关信息
| ||||||||||||||||
[in] | flags | 指定接收操作的行为。常用标志包括:
|
>0 | 成功时返回实际接收到的字节数 |
-1 | 失败 |
int sendmsg | ( | int | s, |
const struct msghdr * | message, | ||
int | flags | ||
) |
在套接字上发送消息
sendmsg() 函数通过套接字 s 发送由 msghdr 结构描述的数据。 该函数适用于发送包含多个缓冲区、控制信息或用于数据报套接字的复杂消息
[in] | s | 要发送消息的套接字文件描述符 | ||||||||||||||||
[in] | message | 指向 msghdr 结构的指针,包含数据、地址和控制信息:
| ||||||||||||||||
[in] | flags | 指定发送操作的行为。常用标志包括:
|
>0 | 成功时返回实际发送的字节数 |
-1 | 失败 |
int getpeername | ( | int | s, |
struct sockaddr * | name, | ||
socklen_t * | namelen | ||
) |
获取与套接字连接的对端地址
此函数用于获取与套接字 s 连接的对端(远程)地址信息。 通常用于已连接的套接字(如 TCP),以获取对端主机的地址和端口等信息
[in] | s | 已连接套接字的文件描述符 |
[out] | name | 指向 sockaddr 结构的指针,该结构将被填充为对端地址。 结构类型(如 IPv4 使用 sockaddr_in)取决于套接字的地址族 |
[in,out] | namelen | 指向变量的指针,初始时为 name 结构的大小, 返回时将保存实际返回的地址大小 |
0 | 成功 |
-1 | 失败 |
int getsockname | ( | int | s, |
struct sockaddr * | name, | ||
socklen_t * | namelen | ||
) |
获取套接字的本地地址信息
此函数用于获取与套接字 s 关联的本地地址(IP 地址和端口)。 通常用于已绑定或已连接的套接字,以确定其实际使用的本地地址和端口。
[in] | s | 套接字的文件描述符 |
[out] | name | 指向 sockaddr 结构的指针,该结构将被填充为本地地址。 结构类型(如 IPv4 使用 sockaddr_in)取决于套接字的地址族 |
[in,out] | namelen | 指向变量的指针,初始时为 name 结构的大小, 返回时将保存实际返回的地址大小 |
0 | 成功 |
-1 | 失败 |
int ioctlsocket | ( | int | s, |
long | cmd, | ||
void * | arg | ||
) |
控制套接字的 I/O 模式
ioctlsocket() 函数用于操作由文件描述符 s 指定的套接字的 I/O 模式。 主要用于启用或禁用套接字的非阻塞模式,或执行其他与套接字相关的特定操作
[in] | s | 要控制的套接字文件描述符 | ||||||
[in] | cmd | 指定要执行操作的命令。常用命令包括:
| ||||||
[in,out] | arg | 指向命令参数的指针。该参数的类型和含义取决于 cmd 的具体命令。 例如,FIONBIO 时,arg 指向一个 long 类型变量, 非零表示启用,零表示禁用非阻塞模式 |
0 | 操作成功 |
-1 | 操作失败 |
int socketpair | ( | int | domain, |
int | type, | ||
int | protocol, | ||
int * | fds | ||
) |
创建一对已连接的套接字
socketpair() 函数用于创建一对互相连接的套接字, 常用于同一台机器上进程或线程间的双向通信。 该函数主要用于 UNIX 类操作系统中的进程间通信(IPC)
[in] | domain | 通信协议族(地址族), 通常使用 AF_UNIX(或 AF_LOCAL)用于本地通信 |
[in] | type | 套接字类型,常见取值包括:
|
[in] | protocol | 套接字所使用的协议。通常设置为 0, 表示根据 domain 和 type 选择默认协议 |
[out] | fds | 整型数组,长度为 2。成功时,fds[0] 和 fds[1] 分别为这对已连接套接字的文件描述符 |
0 | 成功 |
-1 | 失败 |
struct hostent* gethostbyname | ( | const char * | name | ) |
根据主机名获取主机信息
此函数用于根据主机名检索主机的相关信息(如 IP 地址等)。
[in] | name | 主机名字符串 |
!RT_NULL | 指向 hostent 结构体的指针,包含主机信息 |
NULL | 失败 |
int gethostbyname_r | ( | const char * | name, |
struct hostent * | ret, | ||
char * | buf, | ||
size_t | buflen, | ||
struct hostent ** | result, | ||
int * | h_errnop | ||
) |
线程安全地通过主机名获取主机信息
此函数是 gethostbyname 的可重入版本,用于根据主机名 name 查询主机信息, 并将结果存储在 ret 指向的结构体中。结果缓冲区由 buf 提供,大小为 buflen。 查询结果的指针通过 result 返回,错误码通过 h_errnop 返回
[in] | name | 要查询的主机名 |
[in] | ret | 用于存储主机信息的结构体指针 |
[out] | buf | 用于存储主机信息的缓冲区 |
[in] | buflen | 缓冲区 buf 的大小 |
[out] | result | 查询结果的指针输出参数 |
[out] | h_errnop | 错误码输出参数 |
0 | 成功 |
-1 | 失败 |
int select | ( | int | nfds, |
fd_set * | readfds, | ||
fd_set * | writefds, | ||
fd_set * | exceptfds, | ||
struct timeval * | timeout | ||
) |
[in] 同步 I/O 复用:在一组文件描述符上复用输入/输出操作。
[in] | nfds | 所有三个集合中编号最高的文件描述符加 1。 |
[in] | readfds | 指向一组文件描述符的指针,用于检查其是否可读。 |
[in] | writefds | 指向一组文件描述符的指针,用于检查其是否可写。 |
[in] | exceptfds | 指向一组文件描述符的指针,用于检查其是否有异常。 |
[in] | timeout | 等待任一指定文件描述符就绪的最大时间。 |
>=0 | 成功 |
<0 | 失败 |