如果我在客户端同步 connect() 返回后立即调用 send(),那么期望在服务器端 accept() 之后立即调用 read() 会返回第一段数据是否合理?即,接收 SYN-ACK 的客户端通常会稍等片刻,看看是否有任何有效负载要包含在完成 3 次握手的 ACK 中?
我的协议(protocol)中的第一条消息将包含一个身份验证 token (< 500 字节),所以我认为在 accept() 之后同步读取()并立即验证会很方便,如果无效则关闭套接字。否则,我似乎需要绑定(bind)一些状态来等待异步超时。我将处理一组有限的通用客户端平台,因此不关心所有 TCP 实现的理论可能性。
最佳答案
没有。
即使您可以依赖行为良好的客户端,但在网络问题中,依赖像这样可靠地发生的任何事情几乎永远是不安全的。
此外,当您使用未加密的数据时,各种中间路由器会认为处理数据是他们的职责。
使用 UDP,问题实际上更简单,但显然您必须实现自己的可靠性和拥塞控制算法。
关于sockets - tcp read() 在 accept() 之后立即,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31283121/