是gen_tcp:accept / 1安全吗?

时间:2010-12-08 08:03:15

标签: sockets erlang

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

我使用了这个结构:

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

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

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

提前谢谢。

2 个答案:

答案 0 :(得分:4)

当你按照你的描述倾听/接受它时有点不同:

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

当有人向你发送SYN而没有其他内容(如果大量进行会发生SYN泛洪攻击),那么操作系统资源将被保留,但是你的erlang代码没有任何反应,因为三方握手还没有完成。

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

答案 1 :(得分:0)

您使用的方法似乎没问题。您的服务器不会阻止。如果出现问题,我相信您的分叉进程将收到错误,而不是服务器。