在accept()

时间:2015-07-08 03:40:01

标签: sockets unix tcp

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

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

2 个答案:

答案 0 :(得分:1)

没有

即使您可以依赖性能良好的客户端,但在网络问题中,依赖于可靠发生的任何事情,几乎永远不会安全。

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

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

答案 1 :(得分:1)

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