net.Listen() 으로 받은것을
sock.Accept()로 받아 어떤 FD에 저장이 되어서 처리되고 있나를 보고 싶은데
(왜 굳이 이게 필요한 진 묻지 말자. 걍 보고 싶었음)
아래와 같이 8000번 열고 nc localhost 8000 하면 접속이 가능하다.
그나저나 conn.File()은 없는 메소드라 나오고
conn.(*net.TCPConn).File()은 되는데 타입 캐스팅인가? 도대체 무슨 문법이지?
tcp_sock, err := net.Listen("tcp", ":8000") if err != nil { fmt.Println(err) } for { conn, err := tcp_sock.Accept() if err != nil { fmt.Println(err) continue } fmt.Println(conn) fd, err := conn.(*net.TCPConn).File() if err != nil { fmt.Println(fd.Fd()) } fmt.Println(reflect.TypeOf(conn)) fmt.Println(conn.LocalAddr()) fmt.Println(conn.RemoteAddr()) } fmt.Println("done") |
&{{0xc0000a0180}} *net.TCPConn 127.0.0.1:8000 127.0.0.1:37690 |
위와 같이 출력된다. 왜 그러나 했더니 포인터 형태로 리턴되는건데, 이걸 출력하려면 unsafe를 써야 하는건가..
[링크 : https://pkg.go.dev/net#TCPConn.File]
[링크 : https://pkg.go.dev/os#File.Fd]
[링크 : https://pkg.go.dev/builtin#uintptr]
+
[링크 : https://pkg.go.dev/net#Conn]
Type assertions
'Programming > golang' 카테고리의 다른 글
golang 웹 pprof (0) | 2023.01.03 |
---|---|
golang shared memory 모듈 (0) | 2022.11.22 |
golang 변수 타입 알아내기 (0) | 2022.10.05 |
cgo (0) | 2022.10.04 |
golang unsafe package (0) | 2022.10.01 |