2017-05-22 24 views
0

手册页不包含在发生错误时引用传入accept()函数的sockaddr变量的状态。失败的accept()中的sockaddr的状态()

可以肯定的是,如果客户端连接的时间和接受它的时间之间出现错误,导致receive()的返回值小于0,那么sockaddr结构仍然被填充,并且IP信息有效?

+0

我猜测可能性是接受总是有效的,你会立即断开连接事件。不知道如何测试或触发一个接受错误。 – RobC

+0

您可以通过在'accept()'或其之前的键盘输入上放置一个断点来测试它;运行客户端连接和关闭;然后继续服务器。 – EJP

回答

2

是否安全地假设,如果客户端连接的时间和接受它的时间之间出现错误,导致receive()的返回值小于0,那么sockaddr结构仍然被填充IP信息是否有效?

号如果accept()失败,没有任何地方说保证任何已经发生的sockaddr结构或长字可言,或者如果有什么发生吧,现在意味着什么。具体来说,人接受说:

这种结构与同行插座

的地址填写。如果出现了故障,没有对插座,ERGO没有同行套接字地址,ergo没有填写。

+0

我按照你的建议进行了测试,但我得到了接受工作,我得到了IP,并且立即读取事件并断开连接。 recv()= 0. – RobC

+0

我问这个问题的原因是因为我想知道是否有可能触发连接但杀死它的攻击是可能的,而且您应该能够看到该连接的IP即使它在你接受的时候已经下降了。 – RobC

+0

也许答案是,如果接受失败你不接受,但接受不会在我给予的情况下失败。 – RobC

相关问题