没有合适的资源?快使用搜索试试~ 我知道了~
linux_网络编程API
需积分: 10 0 下载量 138 浏览量
2022-07-19
22:58:26
上传
评论
收藏 1.04MB PDF 举报
温馨提示
试读
1页
因自己学习了相关知识,自己总结的API函数,个人能力有限,有错误的地方,请大家指正,谢谢。
资源详情
资源评论
资源推荐
网络编程
API
函数总结
UDP_API
函数
UDP/TCP
通信共用函数
TCP_API
函数
recvfrom
sendto
listen
accept
write/read
send/recv
connect
函数功能
函数使用
函数功能
函数用法
头文件
函数原型
参数说明
返回值
使用示例
头文件
函数原型
参数说明
返回值
使用示例
成功返回
0
错误
返回
-1
sockfd:
通信套接字
id
addr:
地址容器
存放对方的
IP serverip
addrlen:
地址长度
函数功能
函数使用
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
函数功能
函数用法
int connect(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
头文件
函数原型
参数说明
返回值
使用示例 暂无
成功返回
相应的字节
失败返回
-1
sockfd:
套接字描述符;
buf:
指明一个缓冲区,该缓冲区用来存放
/
接收数据;
len:
指明
buf
的长度;
flags:
一般置
0
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
#include <sys/types.h>
#include <sys/socket.h>
头文件
函数原型
参数说明
返回值
使用示例
成功返回
接收到的字节
失败返回
-1
说明
ssize_t
:相当于
long int
size_t:
无符号整型
unsigned int
sockfd:
标识一个已连接套接口的描述字。
buf
:
接收数据缓冲区。
len
:缓冲区长度。
flags
:
flags
:调用操作方式。是以下一个或者多个标志的组合体,
可通过
“ | ”
操作符连在一起
:
MSG_DONTWAIT:
非阻塞模式
0 :
默认属性
阻塞模式
(需要设置其他参数可去查)
src_addr
:
地址结构体
: 1
、用于传递参数
接收给自己的消息
2
、用于返回
对方的
IP
与端口
addrlen:
地址长度
1
、用于传递参数
自己
IP
的长度
2
、
用于返回
对方的
IP
长度
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
记法
功能
记法:
recever from (
接收者来自
)
函数功能
本函数用于从
(
已连接
)
套接口上接收数据,并捕获数据发送源的地址。
对于
SOCK_STREAM
类型的套接口,最多可接收缓冲区大小个数据。
#include <sys/types.h>
#include <sys/socket.h>
send:
可以用于向窗口发送非
PowerBuilder
预定义事件的消息,
send()
函数直接触发指定窗口相应的事件,执行事件处理程序后返回到调用应用中。
recv:
不论是客户还是服务器应用程序都用
recv
函数从
TCP
连接的另一端接收数据。
发送
/
接收
返回成功
发送的字节数
返回错误
-1
sockfd:
标识一个已连接套接口的描述字
buf
:
发送数据缓冲区。
len:
缓冲区长度。
flags:
调用方式标志位
,
一般为
0
dest_addr:
目标
IP
地址
addrlen:
目标
IP
长度
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
const struct sockaddr *dest_addr, socklen_t addrlen);
#include < sys/types.h >
#include < sys/socket.h >
记法
功能 用来将参数
sockfd
的
socket
连至参数
serv_addr
指定的网络地址。
连接
记法
函数功能 用来将数据由指定的
socket
传给对方主机。
sendto
发送至
函数功能
函数用法
记法
功能
函数功能
函数用法
write:
将某个文件缓冲区的数据
,
写入某个文件内
read:
读取文件指从某一个已打开地文件中
,
读取一定数量地字符
,
然后将这些读取的字符放入某一个预存的缓冲区内
,
供以后使用。
头文件
函数原型
参数说明
返回值
使用示例
头文件
函数原型
参数说明
返回值
使用示例
#include <unistd.h>
成功返回
>= 0
专用于
于这个客户端通信的
描述符
失败返回
-1
sockfd
:套接口描述字,该套接口在
listen()
后监听连接。
addr
:地址容器
,
用于接收
客户端的
IP
与端口
addrlen
:地址长度容器
,
存放客户端的
IP
地址结构长度
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
#include <sys/types.h>
#include <sys/socket.h>
成功返回
读或者写的字节数
失败返回
-1
fd
:
文件描述符
buf:
数据缓冲区
count:
字节数
ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
记法
功能
写
/
读
在一个套接口接受一个连接
接收
函数功能
函数用法
头文件
函数原型
参数说明
返回值
使用示例
记法
功能
listen
函数使用主动连接套接字变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。
在
TCP
服务器编程中
listen
函数把进程变为一个服务器,并指定相应的套接字变为被动连接。
监听
成功返回
0
失败返回
-1
sockfd
:一个已绑定未被连接的套接字描述符
backlog
:允许的最大连接数
int listen(int sockfd, int backlog);
#include <sys/types.h>
#include <sys/socket.h>
socket
inet_aton
htons
atoi
bind
close
setsockopt
getsockopt
select
epoll
相关
API
函数
sigaction
函数功能
函数使用方法
函数功能
函数用法
头文件
函数原型
参数说明
返回值
函数用法
头文件
函数原型
参数说明
返回值
使用示例
分支主题
1
signum:
信号
ID
act:
设置信号属性
容器
oldact:
原来的信号属性
struct sigaction {
void (*sa_handler)(int); //
函数指针
信号处理方式
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags; //
属性
void (*sa_restorer)(void);
};
int sigaction(int signum, const struct sigaction *act,
struct sigaction *oldact);
#include <signal.h>
成功返回
0
失败返回
-1
函数功能
函数用法
相关函数
uint32_t htonl(uint32_t hostlong);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
其他参数与
htons
相似
头文件
函数原型
参数说明
返回值
用法:
成功返回
一个网络字节顺序的值
uint16_t hostshort:
主机字节顺序表达的
16
位数
uint16_t htons(uint16_t hostshort)
#include <arpa/inet.h>
函数功能 本函数将一个
16
位数由网络字节顺序转换为主机字节顺序。
函数功能 本函数将一个
32
位数从网络字节顺序转换成主机字节顺序。
函数功能 本函数将一个
32
位数从主机字节顺序转换成网络字节顺序。
记法
函数功能 本函数将一个
16
位数从主机字节顺序转换成网络字节顺序。
函数功能
函数使用
int socket(int domain, int type, int protocol);
相关结构体
用法
头文件
函数原型
参数说明
返回值
使用示例
1
定义
struct sockaddr_in
一个变量
并清空
2
填充地址信息
成功返回
0
失败返回
-1
sockfd
:标识一个套接口的描述字。
level
:选项定义的层次;支持
SOL_SOCKET
、
IPPROTO_TCP
、
IPPROTO_IP
和
IPPROTO_IPV6
。
optname
:需设置的选项。子类
SO_REUSEADDR ip
与端口重用
optval
:指针,指向存放选项待设置的新值的缓冲区
optlen
:
optval
缓冲区长度。
int setsockopt(int sockfd, int level, int optname,
const void *optval, socklen_t optlen);
#include <sys/types.h>
#include <sys/socket.h>
记法
函数功能
#include <sys/types.h>
#include <sys/socket.h>
用于任意类型、任意状态套接口的设置选项值。
set socket opt
设置套接字选项
记法
功能
获取与设置信号的
属性
包括处理方式
,
以及
是否重启被打断的系统调用
singal action
记法
socket:
套接字
函数功能
epoll
epoll_create
epoll_ctl
epoll_wait
用于创建通信套接字
所有网络操作都由它开始
函数功能
函数用法
记法
功能
函数功能
函数用法
不断查看就绪队列中有没有描述符,如果没有就一直检查、直到超时。
如果有就绪描述符,就将就绪描述符通知给用户。
头文件
函数原型
参数说明
返回值
使用示例
记法
功能 向
epoll
句柄添加或者删除要监听的文件句柄。
event poll
control
若
>0
表示
可读文件描述数
最多不超过
maxevents
超过的可读描述符
将
在下次调用时放回
若
=0
表示
超时退出
=-1 err perror
epfd: epoll
描述符
events:
事件存储容器
用于存放
活动的描述符
通常是一个结构体数组
maxevents:
最大的
返回活动描述符的数量
timeout:
超时时间
单位
ms 0
不阻塞
-1
阻塞等待
直到有描述符可读
> 0:
阻塞等待指定时间
,
若指定时间内
无描述符可读
超时退出
头文件
函数原型
参数说明
返回值
使用示例
#include <sys/epoll.h>
返回错误
-1 perror
返回成功
0 ok
epfd: epoll
描述符
op:
操作命令
EPOLL_CTL_ADD:
添加描述符到
epoll
中
EPOLL_CTL_DEL:
删除描述符
从
epoll
池中
fd:
要监视的描述符
event:
描述符
监视属性设置
一个结构体容器
相关联合体
typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
uint64_t u64;
} epoll_data_t;
struct epoll_event {
uint32_t events; /* Epoll events */
epoll_data_t data; /* User data variable */
};
events: EPOLLIN
监视描述符的
输入事件
| EPOLLET
只报告一次
#include <sys/epoll.h>
eventpoll wait
函数功能
函数用法
记法
功能
详细资料连接
头文件
函数原型
参数说明
返回值
使用示例 暂无
失败返回
-1 perror
成功返回
>= 0 epoll
描述符
可以使用
close
关闭
epoll
描述符
size:
预计的
epoll
池的大小
真实的大小由硬件内存大小决定
int epoll_wait(int epfd, struct epoll_event *events,
int maxevents, int timeout);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_create(int size);
#include <sys/epoll.h>
epoll
接口是为解决
Linux
内核处理大量文件描述符而提出的方案。该接口属于
Linux
下
多路
I/O
复用接口中
select/poll
的增强。其经常应用于
Linux
下高并发服务型程序,特别是
在大量并发连接中只有少部分连接处于活跃下的情况
(
通常是这种情况
)
,在该情况下能显著
的提高程序的
CPU
利用率
eventpoll
记法
功能 创建一个
epoll
的文件句柄
eventpoll create
函数功能
函数使用
函数功能
函数用法
头文件
函数原型
参数说明
相关结构体
返回值
使用示例
头文件
函数原型
参数说明
返回值
使用示例
成功返回
0
出错返回
-1
sockfd:
通信套接字
level:
大的分类
按层
SOL_SOCKET IPPORT_IP IPPRO_TCP
optname:
子类
SO_REUSEADDR ip
与端口重用
optval:
容器
用于传递属性
optlen:
容器大小
int getsockopt(int sockfd, int level, int optname,
void *optval, socklen_t *optlen);
暂无
-1
出错
perror
0
超时退出
没有任何描述符事件发生
> 0
表示有
多少个
描述符发生事件了
void FD_CLR(int fd, fd_set *set); //
从监视数组中
删除描述符
int FD_ISSET(int fd, fd_set *set); //
判定
描述符
有无事件发生
void FD_SET(int fd, fd_set *set); //
将描述符加入到
对应组中
void FD_ZERO(fd_set *set);//
清空监视组
nfds:
最大的描述符值
+ 1
readfds:
读事件监视描述符数组
writefds:
写事件监视描述符数组
exceptfds:
其他事件
监视描述符数组
timeout:
阻塞超时时间
struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
记法
功能
记法
功能
是获取一个套接口选项
在编程的过程中
,
经常会遇到许多阻塞的函数
,
好像
read
和网络编程时使用的
recv,
recvfrom
函数都是阻塞的函数
,
当函数不能成功执行的时候
,
程序就会一直阻塞在这里
,
无法执行下面的代码
.
这是就需要用到非阻塞的编程方式
,
使用
selcet
函数就可以实现非阻
塞编程
.selcet
函数是一个轮循函数
,
即当循环询问文件节点
,
可设置超时时间
,
超时时间到了
就跳过代码继续往下执行
选择
get socket opt
:
获取套接字选项
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
函数功能
函数使用
1
、使用
close
函数即可关闭套接字
关闭一个代表已连接套接字将导致另一端接收到一个
0
长度的数据包
2
、做服务器时
1>
关闭监听套接字将导致服务器无法接收新的连接,但不会影响已经建立的连接
2>
关闭
accept
返回的已连接套接字将导致它所代表的连接被关闭,但不会影响服务器
的监听
3
、做客户端时
关闭连接就是关闭连接,不意味着其他
函数功能
函数使用
头文件
函数原型
参数说明
返回值
用法
记法:
bind
绑定
将一本地地址与一套接口捆绑。本函数适用于未连接的数据报或流类套接口,在
connect()
或
listen()
调用前使用。
bind()
函数通过给一个未命名套接口分配一个本地名字来为套接口建立本地捆绑(主机地址
/
端口号)。
成功返回
0
失败返回
-1
头文件
函数原型
参数说明
返回值
用法
成功返回
0
失败返回
-1
fd :
文件描述符
int close(int fd)
#include <unistd.h>
sockfd
:标识一未捆绑套接口的描述字。
addr
:
IP
地址
端口号
等
信息的一个结构体
addrlen
:
表示
addr
的长度,
常用
sizeof(addr);
int bind(int sockfd, const struct sockaddr *addr,
socklen_t addrlen);
#include <sys/types.h>
#include <sys/socket.h>
函数功能
函数用法
头文件
函数原型
参数说明
返回值
用法:
记法:
ascii to integer
函数功能
#include <stdlib.h>
把字符串转换成整型数
错误返回
0
char *nptr
:
字符串,会跳过前面的空白字符(例如空格,
tab
缩进)等
int atoi(const char *nptr);
函数功能
函数使用方法
相关函数
记法
ip network _
ascii
to network
简写
inet_aton()
函数功能
inet_ntoa
将一个字符串表示的点分十进制
IP
地址
IP
转换为网络字节序存储在
addr
中,
并且返回该网络字节序表示的无符号整数。
函数功能
函数使用方法
头文件:
函数原型:
参数说明:
返回值:
用法:
记法
ip network _
network
to ascii
简写
inet_ntoa()
函数功能
struct
sockaddr_in
clientadd ;(
注:
struct
sockaddr_in
里面包含了
struct in_addr)
将一个网络字节序的
IP
地址(也就是结构体
in_addr
类型变量)转化为点分十进制的
IP
地址(字符串)
in
:网络字节序的
IP
地址
char *inet_ntoa(struct in_addr in)
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
成功返回
一个字符串,这个字符串是点分十进制的
IP
地址
失败返回
0
头文件
函数原型
参数说名
返回值
用法
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
成功返回
1
失败返回
0
const char *cp
:我们输入的点分十进制的
IP
地址
struct in_addr *inp
:
将
IP
转换为网络字节序(大端存
储)后并保存在
addr
中
int inet_aton(const char *cp, struct in_addr *inp)
wlwx66
- 粉丝: 22
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0