Skip to content

Commit 86af606

Browse files
rhengjosevalim
authored andcommitted
Update task-and-gen-tcp.markdown (elixir-lang#1046)
Added a KVServer module definition to the file. Received this error without it: `** (ArgumentError) cannot invoke def/2 outside module`
1 parent e42133e commit 86af606

File tree

1 file changed

+32
-30
lines changed

1 file changed

+32
-30
lines changed

getting-started/mix-otp/task-and-gen-tcp.markdown

+32-30
Original file line numberDiff line numberDiff line change
@@ -26,41 +26,43 @@ Let's implement those steps. Move to the `apps/kv_server` application, open up `
2626
```elixir
2727
require Logger
2828

29-
def accept(port) do
30-
# The options below mean:
31-
#
32-
# 1. `:binary` - receives data as binaries (instead of lists)
33-
# 2. `packet: :line` - receives data line by line
34-
# 3. `active: false` - blocks on `:gen_tcp.recv/2` until data is available
35-
# 4. `reuseaddr: true` - allows us to reuse the address if the listener crashes
36-
#
37-
{:ok, socket} = :gen_tcp.listen(port,
38-
[:binary, packet: :line, active: false, reuseaddr: true])
39-
Logger.info "Accepting connections on port #{port}"
40-
loop_acceptor(socket)
41-
end
29+
defmodule KVServer do
30+
def accept(port) do
31+
# The options below mean:
32+
#
33+
# 1. `:binary` - receives data as binaries (instead of lists)
34+
# 2. `packet: :line` - receives data line by line
35+
# 3. `active: false` - blocks on `:gen_tcp.recv/2` until data is available
36+
# 4. `reuseaddr: true` - allows us to reuse the address if the listener crashes
37+
#
38+
{:ok, socket} = :gen_tcp.listen(port,
39+
[:binary, packet: :line, active: false, reuseaddr: true])
40+
Logger.info "Accepting connections on port #{port}"
41+
loop_acceptor(socket)
42+
end
4243

43-
defp loop_acceptor(socket) do
44-
{:ok, client} = :gen_tcp.accept(socket)
45-
serve(client)
46-
loop_acceptor(socket)
47-
end
44+
defp loop_acceptor(socket) do
45+
{:ok, client} = :gen_tcp.accept(socket)
46+
serve(client)
47+
loop_acceptor(socket)
48+
end
4849

49-
defp serve(socket) do
50-
socket
51-
|> read_line()
52-
|> write_line(socket)
50+
defp serve(socket) do
51+
socket
52+
|> read_line()
53+
|> write_line(socket)
5354

54-
serve(socket)
55-
end
55+
serve(socket)
56+
end
5657

57-
defp read_line(socket) do
58-
{:ok, data} = :gen_tcp.recv(socket, 0)
59-
data
60-
end
58+
defp read_line(socket) do
59+
{:ok, data} = :gen_tcp.recv(socket, 0)
60+
data
61+
end
6162

62-
defp write_line(line, socket) do
63-
:gen_tcp.send(socket, line)
63+
defp write_line(line, socket) do
64+
:gen_tcp.send(socket, line)
65+
end
6466
end
6567
```
6668

0 commit comments

Comments
 (0)