作者|donatello1996来源 | 电子发烧友题图|飞凌嵌入式本文采用的硬件板卡为飞凌嵌入式OKMX8MP-C开发板,系统版本Linux5.4.70+Qt5.15.0,主要介绍基于HTTP网页服务器和UDP上位机的MJPG码流传输。MJPG格式作为一种持续传输的视频码流,在远程监控领域中应用较广,而实现这种远程监控的第三方应用最常见的有两种:浏览器HT …
setsockopt
Linux内核在2022年主要发布了5.16-5.19以及6.0和6.1这几个版本,每个版本都为eBPF引入了大量的新特性。本文将对这些新特性进行一点简要的介绍,更详细的资料请参考对应的链接信息。总体而言,eBPF在内核中依然是最活跃的模块之一,它的功能特性也还在高速发展中。某种意义上说,eBPF正朝着一个完备的内核态可编程接口快速进化。eBPF 进阶: 内 …
大家好,我是杂烩君。上一篇文章我们分享了嵌入式中,TCP通信常用接口的使用封装,其demo中我们只是简单地实现一对一的收发。但是实际开发中,tcp server是要支持与多个client同时进行通信的,本篇分享一对多的收发,也即tcp server并发处理。tcp server实现并发的方式有:多进程、多线程。多进程开销比较大,不常用。本篇笔记我们分享多线程 …
UDP和TCP两大协议的区别谈起UDP与TCP两大协议的异同,有人说我喜欢用TCP不喜欢用UDP,也有人说我喜欢用UDP而不喜欢用TCP,使用TCP的人说,我使用使用的协议比较可靠、不容易粘包、不容易丢包;使用UDP的人说,我使用的协议操作简单、传输速度比较快;我想说的是各有各的好处与不足。下面就让四哥给大家讲讲他们的优缺点与重要的区别,然后在选择适合自己的 …
实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了 8000 ),这时候,别的套接字就无法使用这个端口( 8000 ), 验证例子如下:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h&g …
linux socket编程指北以下server和client的c代码均拷贝自博客,详细内容请阅读原文。在其上添加了错误码打印,修改了服务端ip和端口,并增加了makefile脚本。server*serve_tcp.c*#include<stdio.h>#include<syssocket.h>#include<netineti …
1. 前言众所周知,map 可用于内核 BPF 程序和用户应用程序之间实现双向的数据交换, 为 BPF 技术中的重要基础数据结构。在 BPF 程序中可以通过声明 struct bpf_map_def 结构完成创建,这其实带给我们一种错觉,感觉这和普通的 C 语言变量没有区别,然而事实真的是这样的吗?事情远没有这么简单,读完本文以后相信你会有更大的惊喜。str …
1 Linux IO 模型分类相比于kernel bypass 模式需要结合具体的硬件支撑来讲,native IO是日常工作中接触到比较多的一种,其中同步IO在较长一段时间内被广泛使用,通常我们接触到的IO操作主要分为网络IO和存储IO。在大流量高并发的今天,提到网络IO,很容易想到大名鼎鼎的epoll 以及reactor架构。但是epoll并不属于异步IO …
在 TCP 协议中,默认情况下,当我们调用 close() 函数关闭套接口时,TCP 走四次挥手进行断开链路,但是要是若缓冲区还有数据未发送到对端时,系统将尝试把这些数据发送给对端。四次挥手的过程导致我们在 TIME_WAIT 状态下无法复用端口。有些情况下我们不需要 TIME_WAIT, 而是想快速断开连接,从而避免 socket 的堆积。这个时候我们可以 …
当别人问你,在linux系统上,多个程序能不能绑定同一个端口。可能你会不加思索就说了不能。因为在我们的认知中,在linux系统上,一个进程只能绑定一个端口。其实这种认知是不对的,因为我们还有端口复用。那如何做到端口复用呢?也就是多个程序绑定同一个端口。我们可以利用套接字选项(如SO_REUSEADDR和SO_REUSEPORT),用setsockopt进行设 …