apollo学习之cyber网络IO

apollo学习之cyber网络IO

Apollo自动驾驶系统中还提供了网络通信的能力。网络通信主要是调用socket嵌套字实现,由于操作系统存在IO多路复用,因此需要调用select、poll或epoll,来监视多个文件描述符,等待文件描述符“准备好“进行IO操作。

附赠自动驾驶最全的学习资料和量产经验:链接

Socket嵌套字

socket网络嵌套字可以创建一个网络连接,通过操作socket嵌套字实现网络通信。socket接口如下

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

其中type类型

  • SOCK_STREAM TCP连接

  • SOCK_DGRAM UDP连接

关于socket更多的介绍可以参考socket

接口

绑定socket到IP和端口。

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

监听嵌套字上的连接

int listen(int sockfd, int backlog);

接受套接字上的连接

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

在套接字上启动连接

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

从套接字接收消息

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);

关闭连接

int close(int fd);

流程

socket接口的使用流程图如下图所示,图片来源[1]

image

socket流程,来源于geeksforgeeks

IO多路复用

select、poll和epoll都是用来做IO多路复用的时候,等待描述符准备好进行IO操作,在准备好之后进行读取或者写入操作。select和poll是所有UNIX系统都有的接口,而epoll是linux系统

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值