是gen_tcp:accept/1安全吗?

Chi*_*ang 5 sockets erlang

我正在实现一个接受许多并发连接的服务器.

我使用了这个结构:

loop(Sock) ->
  case gen_tcp:accept(Sock) of
      {ok, CSock} ->    
          fork_handling_process(CSock);
      {error, Reason} ->
          do_something_else();
  end,
  loop(Sock).
Run Code Online (Sandbox Code Playgroud)

我想知道是否有人给我发送了一个SYN,但是从来没有向我发送一个SYN ACK来响应我的服务器ACK,我的服务器是否会被该客户端永远阻止,因为我调用了gen_tcp:accept而没有超时?

顺便说一下,我认为这种情况很难效仿,所以如果你有办法试试,请告诉我.

Thx提前.

Pee*_*ger 4

当您聆听/接受时,它与您所描述的有点不同:

有些客户端想要连接:它发送一个SYN,然后你的操作系统发送一个SYN/ACK(erlang不涉及),当你收到ACK时gen_tcp:accept将返回。

当有人向您发送 SYN 而没有其他任何内容时(如果发送的数量过多,这将是 SYN 洪水攻击),那么操作系统资源将被保留,但您的 erlang 代码中不会发生任何事情,因为三向握手尚未完成。

许多操作系统都特别注意 SYN 洪泛攻击,以避免过多的资源消耗。