首页 文章

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

提问于
浏览
1

如果我在客户端同步connect()之后立即调用send(),那么在服务器端的accept()之后立即调用read()会返回第一段数据是否合理?即,接收SYN-ACK的客户端通常会稍等一下,看看是否有任何有效载荷包含在完成3次握手的ACK上?

我的协议中的第一条消息将包含一个身份验证令牌(<500字节),因此认为在accept()之后立即同步read()和验证会很方便,如果无效则关闭套接字 . 否则,似乎我需要让一些状态等待异步超时 . 我将处理一组有限的通用客户端平台,因此不关心所有TCP实现的理论可能性 .

2 回答

  • 1

    没有 .

    即使您可以依赖行为良好的客户端,在网络问题中依赖可靠的任何事情也几乎是不安全的 .

    此外,当您使用未加密的数据时,各种中间路由器都会认为它们的业务与数据有关 .

    使用UDP,问题实际上更简单,但显然您必须实现自己的可靠性和拥塞控制算法 .

  • 1

    答案一般不是,但Linux提供了TCP_DEFER_ACCEPT套接字选项,这意味着在数据到达之前,accept()不会返回 . 在这种情况下,read()之后的read()应该返回数据 .

相关问题