@@ -9,19 +9,22 @@ defmodule Alchemist.Server.Socket do
99
1010 env = Keyword . get ( opts , :env )
1111 port = Keyword . get ( opts , :port , 0 )
12+ socket_file = opts
13+ |> Keyword . get ( :socket_file , socket_file ( ) )
14+ |> String . to_charlist
1215
1316 children = [
1417 supervisor ( Task.Supervisor , [ [ name: Alchemist.Server.Socket.TaskSupervisor ] ] ) ,
15- worker ( Task , [ __MODULE__ , :accept , [ env , port ] ] )
18+ worker ( Task , [ __MODULE__ , :accept , [ env , port , socket_file ] ] )
1619 ]
1720
1821 opts = [ strategy: :one_for_one , name: Alchemist.Server.Socket.Supervisor ]
1922 Supervisor . start_link ( children , opts )
2023 end
2124
22- def accept ( env , port ) do
25+ def accept ( env , port , socket_file ) do
2326 { :ok , socket } = :gen_tcp . listen ( port ,
24- [ :binary , packet: :line , active: false , reuseaddr: true ] )
27+ [ :binary , packet: :line , active: false , reuseaddr: true , ifaddr: { :local , socket_file } ] )
2528 { :ok , port } = :inet . port ( socket )
2629 IO . puts "ok|localhost:#{ port } "
2730 loop_acceptor ( socket , env )
@@ -58,4 +61,9 @@ defmodule Alchemist.Server.Socket do
5861 defp write_line ( line , socket ) do
5962 :gen_tcp . send ( socket , line )
6063 end
64+
65+ defp socket_file do
66+ sock_id = :erlang . system_time ( )
67+ "/tmp/alchemist-server-#{ sock_id } .sock"
68+ end
6169end
0 commit comments