Heim > Backend-Entwicklung > Golang > So schließen Sie einen Socket in Golang (auf zwei Arten)

So schließen Sie einen Socket in Golang (auf zwei Arten)

PHPz
Freigeben: 2023-04-10 15:59:43
Original
1227 Leute haben es durchsucht

In Golang ist Socket eine wichtige Methode der Netzwerkkommunikation. Beim Betrieb eines Sockets treten jedoch einige Situationen auf, in denen der Socket geschlossen werden muss, z. B. das Beenden des Programms zur Laufzeit, Ausnahmen usw. In diesem Artikel wird dieses Problem aus der Perspektive des Schließens von Sockets in Golang untersucht.

Wie schließe ich einen Socket in Golang? Wir können die folgenden zwei Methoden verwenden:

Die erste Methode besteht darin, den Socket mit der Close()-Methode der net.Conn-Schnittstelle zu schließen. Der spezifische Code lautet wie folgt:

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()
Nach dem Login kopieren

Im obigen Code stellen wir zunächst über die Dial()-Methode eine Verbindung zu einer angegebenen Adresse her und schließen dann die Verbindung über die Close()-Methode. Es ist zu beachten, dass das Go-Programm beim Beenden des Programms automatisch geschlossen wird, wenn wir die Verbindung nicht manuell schließen.

Die zweite Möglichkeit besteht darin, die Close()-Methode der Listener-Schnittstelle zu verwenden, die von der net.Listen()-Methode zurückgegeben wird, um den Socket zu schließen. Der spezifische Code lautet wie folgt:

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()
Nach dem Login kopieren

Im obigen Code erstellen wir zunächst einen Listener über die Methode Listen() und schließen den Listener dann über die Methode Close(). Es ist zu beachten, dass das Go-Programm beim Beenden des Programms automatisch geschlossen wird, wenn wir den Listener nicht manuell schließen.

Gibt es neben den beiden oben genannten Methoden vielleicht noch andere Möglichkeiten, den Socket zu schließen? Tatsächlich reichen die beiden oben genannten Methoden aus, um unsere Anforderungen zu erfüllen. Wenn wir außerdem die erste Methode verwenden, also die Dial()-Methode anstelle der Listen()-Methode, ist es auch möglich, die Verbindung durch Festlegen eines Timeouts zu schließen. Der spezifische Code lautet wie folgt:

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())
Nach dem Login kopieren

Im obigen Code erstellen wir eine Verbindung über die DialTimeout()-Methode und legen ein Timeout von 2 Sekunden fest. Wenn während der Verbindung eine Ausnahme auftritt, löst die Connect-Methode eine Ausnahme aus und beendet die Verbindung. Andernfalls können wir für die Verbindung das tun, was wir benötigen. Wenn wir die Verbindung nicht benötigen, können wir die Verbindung über die Methode SetDeadline() schließen.

In der Go-Sprache ist das Schließen eines Sockets nicht besonders kompliziert und es stehen viele Möglichkeiten zur Auswahl. Wir können die Verbindung oder den Listener über die Close()-Methode der net.Conn-Schnittstelle oder die Close()-Methode der Listener-Schnittstelle schließen. Darüber hinaus können wir die Verbindung auch schließen, indem wir ein Timeout festlegen. Das Obige wird in diesem Artikel behandelt. Ich hoffe, dass es für Sie hilfreich sein kann.

Das obige ist der detaillierte Inhalt vonSo schließen Sie einen Socket in Golang (auf zwei Arten). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage