linux网络编程基础API

这里写图片描述

创建socket

函数原型:
int socket(int domain, int type, int protocol);
函数功能

创建一个可读、可写、可控制、可关闭的文件描述符,调用成功返回socket,失败返回-1。

参数解释:
  • domain : 使用哪个底层协议族
  • type : 指定服务类型
  • protocol : 设置为0,表示默认协议

命名socket

函数原型
int bind(int sockfd, const struct sockaddr* my_addr, socklen_t addrlen);
函数功能

将my_addr所指的socket地址分配给未命名的sockfd,成功返回0,失败返回-1并设置errno(EACCES或EADDRINUSE)。

参数解释
  • my_addr:TCP/IP协议族又sockaddr_in和sockaddr_in6两个专用socket地址结构体,其中保存地址族,端口号等信息,在传参时转换为sockaddr类型。

监听socket

函数原型
int listen(int sockfd, int backlog);
函数功能

创建一个监听队列以存放待处理的客户连接,成功返回0,失败返回-1并设置errno。

参数解释
  • sockfd: 指定被监听的socket
  • backlog:提示内核监听队列的最大长度,典型值为5,监听队列如果超过backlog,服务器不受理新的客户连接。

接受连接

函数原型
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
函数功能

从listen监听队列中接受一个链接,成功返回一个新的socket,该socket唯一标识了被接受的这个连接

参数解释
  • addr:用来获取被接受连接的远端socket地址。

发起连接

函数原型
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
函数功能

客户端通过这个函数主动与服务器建立连接(服务器通过listen调用来被动接受连接)成功返回0,一旦成功,sockfd唯一标识这个连接。客户通过读写这个sockfd来通信。失败返回-1并置errno(ECONNREFUSED和ETIMEDOUT)。

参数解释
  • sockfd:由socket系统调用返回一个socket。
  • serv_addr:服务器监听的socket地址。
  • addrlen:指定这个地址的长度。

TCP读写

函数原型
TCP
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
UDP
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr,socklen_t addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
函数功能

socket数据读写
UDP与TCP不同在于每次发送都要通过最后两个参数获取发送端的socket地址,因为UDP没有连接的概念。recvfrom和sendto也可用于面向连接,只需将后两个参数置NULL。

函数参数
  • buf:指定缓冲区位置
  • len:指定缓冲区大小
  • flags :MSG_OOB:发送或接受紧急数据(带外数据)。

socket选项

函数原型
int getsockopt(int sockfd, int level, int option_name, void *option_value, socklen_t * restrict option_len);
int setsockopt(int sockfd, int level, int option_name, const void* option_value, socklen_t option_len);
函数功能

用来读取和设置socket文件描述符属性的方法。

option_name参数说明
  • SO_REUSEADDR 强制使用被处于TIME_WAIT状态的连接占用的socket地址。
  • SO_RCVBUF和SO_SNDBUF:TCP接收缓冲区和发送缓冲区的大小。

获取IP地址函数

函数原型
int getaddrinfo(const char *hostname, const char *service, const struct addrinfo *hints, struct addrinfo **result);

int getnameinfo(const struct sockaddr *sockaddr, socklen_t addrlen, char *host, socklen_t hostlen, char *serv, socklen_t servlen, int flags);
函数功能

通过主机名获得IP地址,通过服务名获得端口号
通过socket地址获取以字符串表示的主机名和服务名

参数解释
  • hostname:可以接受主机名或字符串表示的IP地址
  • service:接受服务名或者字符串表示的十进制端口号
  • hints:设置NULL,表示允许函数反馈任何有用的结果
  • result:指向一个存储函数反馈结果的链表
  • host:存放返回的主机名
  • serv:存放返回的服务名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值