小编sam*_*ba2的帖子

TCP 零窗口后 TCP 重置

多年来,我们的定制软件一直使用打印机命令语言 (PCL) 在不同的打印机上进行打印。

现在我们有一个新的轻型打印机,我们正在努力支持它。简单的打印就可以完美地工作。但是,如果打印作业的大小增大,我们就会遇到打印作业中断的情况。

环境:

  • 两者之间没有活动的网络硬件(例如数据包检查防火墙)。
  • 工作站(这是我们的软件运行的地方)使用 Linux 内核版本 3.0.101。这里发生了下面描述的 TCP 重置。

使用 Wireshark 我们发现以下内容:

  • 我们看到打印机的 TCP 接收窗口大小每 2-3 秒就会变为零。这表明打印机硬件速度太慢,无法实时处理传入数据。
  • 此零窗口超时通常需要大约 1-2 秒。
  • 打印机向工作站发送“零窗口”确认数据包后,工作站尝试通过定期发送 TCP 保持活动数据包来保持与打印机的连接。
  • 打印机正在应答此保持活动数据包。
  • 当打印机准备好再次处理数据时,它会向工作站发送“TCP 窗口更新”数据包。该数据包包含打印机的新接收窗口大小。一旦工作站收到此数据包,它就会开始再次向打印机发送数据。

这是刚刚解释的通信的跟踪片段: 在此输入图像描述

我对“TCP零窗口”机制的理解是,只要打印机正在应答工作站的保活数据包,通信的停止和重新启动就可以永远进行。

然而,在我们的例子中,通信在一段时间后就会中断: 在此输入图像描述

一段时间后(通常是 1-3 分钟后),工作站不再发送新的保持连接,但正在重置通信。对于我们来说,这是无法解释的,因为所有先前的保持活动数据包都会立即被打印机确认。

我也没有成功地尝试复制这个场景。我写了一个简单的TCP客户端和服务器。为了强制出现 TCP 零窗口,TCP 服务器会休眠一段时间,然后继续接收数据。但是,无论服务器等待(睡眠)或中断传输多长时间,我都无法让两者中的任何一个重置通信。相反,上述 TCP 保活/确认算法在空闲时间内运行,以保持连接处于活动状态。

您知道是什么让我们的工作站在有效 TCP 连接期间发送此重置吗?

c sockets printing tcp

6
推荐指数
0
解决办法
3362
查看次数

C11 的安全字符串函数什么时候会成为 glibc 的一部分?

C11 标准附件 K 定义了一堆新的更安全的字符串函数,都以_s 为后缀(例如strcpy_s)。

你知道这些新函数什么时候会在 GNU C 库 glibc 中可用吗?

到目前为止,您必须退回到像safec这样的第三方库。

c glibc tr24731 c11

6
推荐指数
1
解决办法
1960
查看次数

如何在集成/端到端测试中启动完整的.NET Core Worker Service?

TLDR:为了集成测试 .NET Core Web 应用程序,我们有WebApplicationFactory. 我如何为工人服务做同样的事情?

鉴于此工人服务:

// Program.cs

using SampleWorker;

IHost host = Host.CreateDefaultBuilder(args)
    .ConfigureServices(services => { services.AddHostedService<Worker>(); })
    .Build();

host.Run();
Run Code Online (Sandbox Code Playgroud)
// Worker.cs

public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        // - connect to a middleware (data source)
        // - connect to database (data sink)
        // - received events from middleware, transform + persist in database
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够编写一个端到端测试,通过测试容器(有效)和被测单元(工作服务)提供数据源和接收器,以某种方式直接通过 …

c# integration-testing xunit .net-core

6
推荐指数
1
解决办法
929
查看次数

与 Python 的流畅界面

我有一个 Python 函数“send_message”,它接受三个参数:

send_message("i like windmills", to="INBOX", from="OUTBOX")
Run Code Online (Sandbox Code Playgroud)

我正在考虑在它上面放置一个流畅的界面。理想情况下,我想编写以下任何内容:

send_message("i like windmills").to("INBOX").from("OUTBOX")

send_message("i like windmills").from("OUTBOX").to("INBOX")

# The `to()` information is mandatory but the `from()` is not (as with real letters), so this one would also be a valid call:
send_message("i like windmills").to("INBOX")
Run Code Online (Sandbox Code Playgroud)

任何想法如何实现这一点或类似的东西?

我理解让对象的方法返回“self”的一般方法,但在我的理解中,这将导致如下结果:

message = Message("i like windmills")
message.to("INBOX").from("OUTBOX").send()
Run Code Online (Sandbox Code Playgroud)

但是这个不如前面的例子好,那么我实际上更喜欢带有命名参数的原始版本。

任何帮助表示赞赏。

python dsl fluent-interface

3
推荐指数
1
解决办法
4120
查看次数

在 SAP Web IDE 中如何仅使用 JSON 模拟数据而不使用 metadata.xml

在 SAP Web IDE 中,我尝试使用布局编辑器来创建视图。我的项目使用 JSON 模型,而不是 oData 模型。

在布局编辑器中,查看属性,“数据集” - 有没有办法直接分配一个 JSON 文件用作模拟数据的源,无需使用 metadata.xml 文件?

当前,只有在正确位置存在 metadata.xml 文件时,才会填充“数据集”下拉菜单。

sapui5

1
推荐指数
1
解决办法
2334
查看次数