sockets - tcp read() 在 accept() 之后立即

标签 sockets unix tcp

如果我在客户端同步 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/

相关文章:

c++ - 使用 Pragma 以字节为单位适应套接字的大小

python - 如何知道客户端在套接字中断开服务器连接

java - 带有 Java 套接字的 HTTP 客户端

linux - 循环运行 shell 脚本时出错

c - 返回指向函数错误的指针

python-3.x - Python3.5 Asyncio TCP 扫描器

无法分配请求的地址 - 可能的原因?

unix - 如何根据多个列值拆分文件

c# - TCP 服务器 : "Only one usage of each socket address (protocol/network address/port) is normally permitted."

sockets - 如何解码Websocket数据包?