Programming/golang
golang net.TCPConn
구차니
2022. 10. 7. 18:00
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