Linux 网络编程常用API

主机字节顺序 --> 网络字节顺序

端口号:

uint16_t htons(uint16_t hostshort);

IP

 uint32_t htonl(uint32_t hostlong);

网络字节顺序 --> 主机字节顺序

端口号:

uint16_t ntohs(uint16_t netshort);

IP:

uint32_t ntohl(uint32_t netlong);

IP地址转换函数

本地IP转网络字节序 字符串 --> int(大端方式存储)

int inet_pton(int af, const char *src,void *dst);

参数:

  • af:指定当前所使用的协议,AF_INET(IPV4),AF_INET6(IPV6) src:
  • IP地址(点分十进制)
  • dst:传出,网络字节序的IP地址

网络字节序转本地IP int -> 字符串

const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
//sockaddr_in(IPV4)结构
struct sockaddr_in {
sa_family_t sin_family; /* 地址族: AF_INET */
u_int16_t sin_port; /* 按网络字节次序的端口 */
struct in_addr sin_addr; /* internet地址 */
};

/* Internet地址. */
struct in_addr {
u_int32_t s_addr; /* 按网络字节次序的地址 */
};

参数:

  • List item

size:dst的大小

socket创建套接字

int socket(int domain, int type, int protocol);

参数:

  • domin:指定协议,AF_INET、AF_INET6、AF_UNIX(本地)
  • type:指定传输协议:SOCK_STREAM(流式协议)、SOCK_DGRAM(报式协议)
  • protocol:传输协议的代表协议(如流式协议代表协议tcp,报式协议代表协议udp)。通常传0

bind 给socket绑定本地IP和端口

int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);

参数:

  • sockfd:本地socket文件描述符
  • my_addr:传入,地址结构
  • addrlen:地址结构大小

listen 监听

int listen(int s, int backlog);

参数:

  • s:本地socket文件描述符
  • backlog:设置同时与服务器连接的上线数

accept 等待并接收连接请求

int accept(int s, struct sockaddr *addr, socklen_t *addrlen);

等待客户端的连接(阻塞等待),成功则返回客户端套接字

参数:

  • s:本地socket文件描述符
  • addr:传出,与客户端建立连接的地址结构
  • addrlen:传入传出,传入addr大小,传出客户端addr实际大小

通信

read/recv 接收数据

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

write/send 发送数据

int send(int s, const void *msg, size_t len, int flags);

关闭

close

connect 客户端连接服务器

int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

参数:

  • sockfd:本地socket文件描述符
  • addr:服务器的地址结构
  • addrlen:addr长度

select

int select(int nfds, fd_set* readfds,fd_set* writefds,fd_set* exceptfds, struct timeval* timeout)

参数

nfds:要检测的文件描述中最大的fd + 1也可以传1024
readfds:读集合
writefds:写集合
exceptfds:异常集合
timeout:阻塞时间

文件描述符操作函数

void FD_ZERO(fd_set* set) 				//全部清空
void FD_CLR(int fd,fd_set* set) 		//从集合中删除某一项
void FD_SET(int fd,fd_set* set) 		//将某个文件描述符添加到集合
void FD_ISSET(int fd,fd_set* set) 		//判断某个文件是否在集合中

epoll

epoll_create 生成树根节点

int epoll_create(int size);

epoll内部是树结构,该函数生成一个根节点

参数:

  • size:节点个数

epoll_ctl

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

用于控制某个epoll文件描述符事件,可以注册,修改,删除

参数:

  • epfd:epoll树的根节点
  • op:对应的操作:注册:EPOLL_CTL_ADD、修改:EPOLL_CTL_MOD、删除:EPOLL_CTL_DEL
  • fd:要注册、修改、或删除的文件描述符 event:告诉内核要监听什么事件

epoll_wait

int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout);

委托内核检测哪些描述符要进行I/O操作,返回events中发生变化的个数

参数:

  • epfd:epoll树的根节点
  • events:传出,结构体数组地址,哪些节点要进行I/O操作
  • maxevents:events大小
  • timeout:超时时间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值