File tree 3 files changed +36
-5
lines changed
3 files changed +36
-5
lines changed Original file line number Diff line number Diff line change
1
+ module module
2
+
3
+ go 1.19
Original file line number Diff line number Diff line change 1
1
package main
2
2
3
- import "fmt"
3
+ import (
4
+ "fmt"
5
+ "module/monolib"
6
+ )
4
7
5
8
func main (){
6
9
fmt .Println ("Hello World" )
10
+ err := monolib .TestListen ()
11
+ if err != nil {
12
+ fmt .Println (err )
13
+ }
7
14
}
Original file line number Diff line number Diff line change @@ -3,10 +3,10 @@ package monolib
3
3
4
4
import (
5
5
"net"
6
- "testing "
6
+ "fmt "
7
7
)
8
8
9
- func TestListen (t * testing. T ) {
9
+ func TestListen () error {
10
10
// listener 와 err 를 리턴 받습니다.
11
11
// listener 는 net.Listener 인터페이스를 구현한 객체입니다.
12
12
// err 는 error 인터페이스를 구현한 객체입니다.
@@ -24,7 +24,7 @@ func TestListen(t *testing.T) {
24
24
// 에러가 발생하면 테스트를 실패합니다.
25
25
// 에러가 발생하지 않으면 테스트를 성공합니다.
26
26
if err != nil {
27
- t . Fatal ( err )
27
+ fmt . Println ( "Error: " , err )
28
28
}
29
29
30
30
// defer 는 함수가 종료되기 직전에 실행됩니다.
@@ -40,5 +40,26 @@ func TestListen(t *testing.T) {
40
40
41
41
// listener.Addr()의 반환값은
42
42
// %q 는 쌍따옴표로 묶인 문자열을 표시합니다.
43
- t .Logf ("bound to %q" , listener .Addr ())
43
+ fmt .Println ("bound to" , listener .Addr ())
44
+
45
+ // for 루프는 무한 루프입니다.
46
+
47
+ // Accept 메서드는 리스너가 수신 대기 중인 연결을 반환합니다.
48
+ // Accept 메서드는 블로킹 메서드입니다.
49
+ // Accept 메서드는 블로킹 메서드이기 때문에
50
+ // 리스너가 수신 대기 중인 연결이 없으면 무한정 블로킹됩니다.
51
+ for {
52
+ conn , err := listener .Accept ()
53
+ if err != nil {
54
+ return err
55
+ }
56
+
57
+ // go 는 고루틴을 생성합니다.
58
+ // 고루틴은 경량스레드 입니다.
59
+ go func (c net.Conn ) {
60
+ defer c .Close ()
61
+ _ , _ = c .Write ([]byte ("Hello World" ))
62
+
63
+ }(conn )
64
+ }
44
65
}
You can’t perform that action at this time.
0 commit comments