gpt4 book ai didi

sockets - 关闭读边后是否读套接字?

转载 作者:行者123 更新时间:2023-12-03 11:59:59 25 4
gpt4 key购买 nike

我是服务器。我正在从套接字读取数据。我从套接字读取了一些不好的消息,使我想断开连接,但是我不想丢失“已经在管道中”的传入数据。我需要告诉发送方停止发送,因为我要断开连接,并且当我关闭套接字时,他放在电线上的任何东西都将丢失。

我该怎么办?我会发出shutdown(socket, SHUT_RD)吗?如果我这样做了,这会告诉发送方停止发送,但允许我继续读取套接字,直到耗尽所有数据吗?

该应用程序应该永远不会丢失数据。

服务器是用Java编写的,我不是开发人员。我正在向他提出建议,以使我发送给他的数据永远不会丢失。我正在开发对套接字API没有很好控制的客户端(Node.js)。

我必须手动编写HTTP管道,因为Node.js不会这样做。在这里,客户端只是继续通过连接发送HTTP,并且在发送下一个请求之前不等待响应。客户端发送约30k QPS。

我有一个计划,将请求排队在FIFO队列中,然后在响应返回时将其删除。如果连接断开,我将重播所有未确认的请求,但是最终也会播放“The Bad”请求,并且连接一次又一次被断开。

我似乎回想起以以下内容开头的内容:

Those who attempt to rewrite TCP are doomed...



所以我想我只是废弃我的复杂系统,看看TCP是否可以满足我的需求。都是Linux环境。

Java开发人员将他的应用程序与Nginx一起使用,而Nginx就是在不进行关闭的情况下删除连接,只是硬性关闭了连接。

无论如何,关键是要使我的客户端具有容错能力,无论另一端做什么,我都希望负责最大程度地减少数据丢失。将未确认的请求排成一行,并在必要时重播它们可以工作,但这并不像看起来那样简单(请注意,“重播不良交易”问题是我没有想到的示例,它还会导致出现重复数据情况还可以,但总体而言可能不行)。

服务器还有其他原因会终止连接。它不时这样做,然后让客户端进行DNS查找(他们可能想即时更改服务器的IP地址),或者可能只是网络故障而中断了连接。

最佳答案

I am a server. I am reading data from a socket. I read something bad from the socket that makes me want to drop the connection, but I don't want to lose incoming data that is "already in the pipe".


为什么不?您读到“不好的东西”:是什么让您认为事后有好事呢?还是您可以正确地重新同步它?跳过一些未知数量的坏字节以到达下一条消息的开头之后?

I need to tell the sender to stop sending because I'm about to drop the connection and anything he puts on the wire will be lost when I close the socket. Do I issue shutdown(socket, SHUT_RD)? If I do, will this tell the sender to stop sending


这高度依赖于平台,具体取决于服务器平台:
  • Windows将发出RST,该RST最终将使发送方获得“连接重置”。
  • 基于BSD的Unixes会接受和忽略数据(即ACK但将其丢弃,而不是将其输入到套接字的接收缓冲区中),因此发送者将继续发送自己喜欢的数据,直到关闭套接字为止,当他将在读取时读取流的末尾或获得“连接重置”时。
  • Linux将接受数据,直到您的套接字发送缓冲区填满为止;然后您的接收窗口将关闭,这将阻止发件人;然后,当您关闭套接字时,发送方将获得“连接重置”。

  • yet allow me to continue to read the socket until all data is drained?


    它可能会或可能不会让您读取所有已到达的数据。例如,Windows在关闭后立即读取时会为您提供 SocketException: Socket input is shutdown。发出关闭请求的那一刻,您不应收到任何正在传输的数据。
    奇怪的要求。我只是断开连接。

    关于sockets - 关闭读边后是否读套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30316618/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com