> 백엔드 개발 > Golang > golang에서 소켓을 닫는 방법(두 가지 방법)

golang에서 소켓을 닫는 방법(두 가지 방법)

PHPz
풀어 주다: 2023-04-10 15:59:43
원래의
1227명이 탐색했습니다.

Golang에서 소켓은 네트워크 통신의 중요한 방법입니다. 그러나 소켓을 작동할 때 런타임 중 프로그램 종료, 예외 등과 같이 소켓을 닫아야 하는 몇 가지 상황에 직면하게 됩니다. 이 기사에서는 Golang에서 소켓을 닫는 관점에서 이 문제를 살펴보겠습니다.

Golang에서 소켓을 닫는 방법은 무엇입니까? 다음 두 가지 방법을 사용할 수 있습니다.

첫 번째 방법은 net.Conn 인터페이스의 Close() 메서드를 사용하여 소켓을 닫는 것입니다. 구체적인 코드는 다음과 같습니다.

conn, err := net.Dial("tcp", "127.0.0.1:8080")
if err != nil {
    log.Fatalf("connect error: %s", err)
}

// do something with conn here

conn.Close()
로그인 후 복사

위 코드에서는 먼저 Dial() 메서드를 통해 지정된 주소에 연결한 후 Close() 메서드를 통해 연결을 닫습니다. 연결을 수동으로 닫지 않으면 프로그램이 종료될 때 Go 프로그램이 자동으로 닫힙니다.

두 번째 방법은 net.Listen() 메서드에서 반환된 Listener 인터페이스의 Close() 메서드를 사용하여 소켓을 닫는 것입니다. 구체적인 코드는 다음과 같습니다.

listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
    log.Fatalf("listen error: %s", err)
}

// do something with listener here

listener.Close()
로그인 후 복사

위 코드에서는 먼저 Listen() 메서드를 통해 리스너를 생성한 후 Close() 메서드를 통해 리스너를 닫습니다. 리스너를 수동으로 닫지 않으면 프로그램이 종료될 때 Go 프로그램이 자동으로 닫힙니다.

위의 두 가지 방법 외에 소켓을 닫는 다른 방법이 있는지 문의하실 수 있습니다. 실제로 위의 두 가지 방법은 우리의 요구를 충족시키기에 충분합니다. 또한 첫 번째 방법, 즉 Listen() 메서드 대신 Dial() 메서드를 사용하는 경우에는 시간 제한을 설정하여 연결을 닫는 것도 가능합니다. 구체적인 코드는 다음과 같습니다.

conn, err := net.DialTimeout("tcp", "127.0.0.1:8080", time.Second*2)
if err != nil {
    log.Printf("connect error: %s", err)
    return
}

// do something with conn here

conn.SetDeadline(time.Now())
로그인 후 복사

위 코드에서는 DialTimeout() 메소드를 통해 연결을 생성하고 타임아웃을 2초로 설정했습니다. 연결 중에 예외가 발생하면 Connect 메서드는 예외를 발생시키고 연결을 종료합니다. 그렇지 않으면 연결에 필요한 작업을 수행할 수 있습니다. 연결이 필요하지 않은 경우 SetDeadline() 메서드를 통해 연결을 닫을 수 있습니다.

Go 언어에서는 소켓을 닫는 것이 특별히 복잡하지 않으며 선택할 수 있는 방법이 많습니다. net.Conn 인터페이스의 Close() 메서드나 Listener 인터페이스의 Close() 메서드를 통해 연결이나 리스너를 닫을 수 있습니다. 또한 시간 초과를 설정하여 연결을 닫을 수도 있습니다. 위의 내용은 이 기사에서 설명한 내용이므로 도움이 되길 바랍니다.

위 내용은 golang에서 소켓을 닫는 방법(두 가지 방법)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿