αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αžŠαž›αŸ‹αž’αŸ’αž“αž€αž‘αžΆαŸ†αž„αž‘αžΆαž™αžŽαžΆ αžŸαŸ’αžœαŸ‚αž„αžšαž€ αž§αž‘αŸ’αž‘αž·αžŸαžŠαž›αŸ‹αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαž”αžŽαŸ’αžαžΆαž‰ αž“αž·αž„αž–αž·αž’αžΈαž€αžΆαžšαŸ”

αžŸαž„αŸ’αžαŸαž”

αž’αžαŸ’αžαž”αž‘αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž’αŸ†αž–αžΈαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“ αž’αž“αž»αžœαžαŸ’αžαž§αž‘αžΆαž αžšαžŽαŸαž“αŸ…αž›αžΎ Goαžšαž½αž˜αž‘αžΆαŸ†αž„ UDP αž“αž·αž„ TCP αŸ” αž’αžΆαžŸαŸ’αžšαŸαž™β€‹αž›αžΎ αžŠαž„, Π΄Π²Π°, αž”αžΈ αž“αž·αž„αžŸαŸ€αžœαž—αŸ… "αž”αžŽαŸ’αžαžΆαž‰αž€αž»αŸ†αž–αŸ’αž™αžΌαž‘αŸαžšαŸ” αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž–αžΈαž›αžΎαž…αž»αŸ‡αž€αŸ’αžšαŸ„αž˜" αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸαž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαž€αŸ†αž–αž»αž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαžαŸ‚ Tannenbaum αž“αž·αž„ Oliferov αž”αŸ‰αž»αžŽαŸ’αžŽαŸ„αŸ‡αŸ”

αž–αž·αž’αžΈαž€αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“

αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αžΌαž‡αžΈαžαž›αžšαžœαžΆαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž•αŸ’αžŸαŸαž„αŸ—αž‚αŸ’αž“αžΆαŸ” αžαžΆαž˜αž‘αžŸαŸ’αžŸαž“αŸˆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ αž€αžΆαžšαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αžΌαž‡αžΈαžαž›αž˜αžΎαž›αž‘αŸ…αžŠαžΌαž…αž‡αžΆαž†αžΆαž“αŸ‚αž›αžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž–αž·αž’αžΈαž€αžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸ„αž™αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž”αž‰αŸ’αž…αž”αŸ‹ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž˜αŸ‚αž“αžŠαŸ„αž™αžšαŸ‰αŸ„αžαž‘αŸαžšαž”αžŽαŸ’αžαžΆαž‰αž‘αŸ (αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚ - DPI & β€§;) αž“αŸ…αž•αŸ’αž“αŸ‚αž€αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎ αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž”αŸ†αž”αŸ’αž›αŸ‚αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžŠαŸ‚αž›αžœαžΆαž‘αž‘αž½αž›αž”αžΆαž“αž–αžΈαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ…αž‡αžΆαž€αž‰αŸ’αž…αž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž αŸ…αžαžΆ segments αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαžŠαŸ„αž™αž€αžΆαžšαž”αŸ†αž”αŸ‚αž€ (αž”αžΎαž…αžΆαŸ†αž”αžΆαž…αŸ‹) αžŸαžΆαžšαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αŸ…αž‡αžΆαž”αŸ†αžŽαŸ‚αž€ αž αžΎαž™αž”αž“αŸ’αžαŸ‚αž˜αž”αž‹αž˜αž€αžαžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž‘αŸ…αž–αž½αž€αžœαžΆαž“αžΈαž˜αž½αž™αŸ—αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž†αŸ’αž›αž„αž€αžΆαžαŸ‹αž•αŸ’αž“αŸ‚αž€αž‘αŸ…αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎ αžŠαŸ‚αž›αž•αŸ’αž“αŸ‚αž€αžαŸ’αžšαžΌαžœαž”αžΆαž“αžšαž»αŸ†αž–αŸαž‘αŸ’αž’αž€αŸ’αž“αž»αž„αž€αž‰αŸ’αž…αž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰ (datagram) αž αžΎαž™αž•αŸ’αž‰αžΎαŸ” αž“αŸ…αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž€αžΆαžšαž‘αž‘αž½αž› αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰αž‘αžΆαž‰αž™αž€αž•αŸ’αž“αŸ‚αž€αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αž…αŸαž‰αž–αžΈ datagram αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αžΎαž„αž‘αŸ…αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αŸ” αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€ αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αž“αŸ‚αž€αžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž› αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αž·αž“αŸ’αž“αž“αŸαž™αžšαž”αžŸαŸ‹αžœαžΆαž˜αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‘αž‘αž½αž›αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž›αžΎαž”αŸ‰αž»αžŸαŸ’αžαž·αŸαžŠαŸ‚αž›αž˜αžΆαž“αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–αž‘αžΆαŸ†αž„αžŸαŸ’αžšαž»αž„

αž€αžšαžŽαžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ” αž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž‡αžΌαž“αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž‘αž‘αž½αž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αž–αžΈαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž›αžΎ αž”αž„αŸ’αž€αžΎαžαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αžœαžΆ αž αžΎαž™αž”αž‰αŸ’αž‡αžΌαž“αžœαžΆαž‘αŸ…αž†αžΆαž“αŸ‚αž›αŸ”

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

package main

import (
    "log"
    "net"
)

func main() {
    // IP-адрСс сСрвСра ΠΈ ΠΏΠΎΡ€Ρ‚
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }

    // создаСм сокСт с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ
    serverConn, err := net.ListenUDP("udp", serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ соСдинСния
    defer serverConn.Close()

    // создаСм Π±ΡƒΡ„Π΅Ρ€ для Π΄Π°Π½Π½Ρ‹Ρ…
    buf := make([]byte, 1024)

    // ТдСм соСдинСниС
    for {
        // Ρ‡ΠΈΡ‚Π°Π΅ΠΌ запрос
        n, addr, err := serverConn.ReadFromUDP(buf)
        // ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π’Π•Π Π₯ΠΠ˜Π™ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ: Π² нашСм случаС stdout
        println(string(buf[0:n]), " form ", addr.IP.String())
        if err != nil {
            log.Fatal(err)
        }
        // ΠΎΡ‚Π²Π΅Ρ‚Π° Π½Π΅Ρ‚, Ρ‚.ΠΊ. это UDP + Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π»
    }
}

αž’αžαž·αžαž·αž‡αž“

package main

import (
    "fmt"
    "log"
    "net"
    "time"
)

func main() {
    // IP-адрСс сСрвСра ΠΈ ΠΏΠΎΡ€Ρ‚
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }
    // Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ IP-адрСс ΠΈ ΠΏΠΎΡ€Ρ‚
    localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
    if err != nil {
        log.Fatal(err)
    }
    // установка соСдинСния
    conn, err := net.DialUDP("udp", localAddr, serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ соСдинСния
    defer conn.Close()

    for {
        // ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ Π’Π•Π Π₯ΠΠ•Π“Πž уровня
        fmt.Print("Π’Π²Π΅Π΄ΠΈΡ‚Π΅ строчноС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ > ")
        var msg string
        _, err := fmt.Scanf("%s", &msg)
        if err != nil {
            log.Fatal(err)
        }
        // пСрСдаСтся ΠΏΠΎΡ‚ΠΎΠΊ Π±Π°ΠΉΡ‚, Π° Π½Π΅ строка
        buf := []byte(msg)
        // запись (ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°) Π² соСдинСниС
        _, err = conn.Write(buf)
        if err != nil {
            log.Fatal(err)
        }
        // 1 сСкундочку
        time.Sleep(time.Second * 1)
    }
}

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž›αžΎαž†αžΆαž“αŸ‚αž›αžŠαŸ‚αž›αž˜αžΆαž“αž€αŸ†αž αž»αžŸαžŠαŸ‚αž›αž’αžΆαž…αž€αžΎαžαž˜αžΆαž“

αž‡αŸ†αž αžΆαž“αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž‚αžΊαžαŸ’αžšαžΌαžœαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αžαžΆαž˜αž›αŸ†αžŠαžΆαž”αŸ‹αž›αŸ†αžŠαŸ„αž™αžŠαŸ‚αž›αž–αž½αž€αž‚αŸαžαŸ’αžšαžΌαžœαž”αžΆαž“αž•αŸ’αž‰αžΎ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž”αŸŠαžΈαžαž“αŸ…αž€αŸ’αž“αž»αž„αž–αž½αž€αžœαžΆαž’αžΆαž…αž“αžΉαž„αžαŸ’αžšαžΌαžœαžαžΌαž… αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž–αŸαž›αžαŸ’αž›αŸ‡αž†αžΆαž“αŸ‚αž›αž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αž„αŸ’αžαžΌαž…αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž™αž“αŸ’αžαž€αžΆαžšαžαžΆαž„αž€αŸ’αžšαŸ„αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαŸ–

  • αž€αžΆαžšαžšαž€αžƒαžΎαž‰αž€αŸ†αž αž»αžŸ;
  • αž˜αžαž·αž€αŸ‚αž›αž˜αŸ’αž’;
  • αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαŸ”

αž–αž·αž’αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž˜αŸ’αžαž„αž‘αŸ€αžαž…αŸ’αžšαžΎαž“αžŠαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ αž–αž·αž’αžΈαž€αžΆαžš reQuest αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· (ARQ) αŸ”
αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαžœαžΆαž˜αžΆαž“αžαž˜αŸ’αž›αŸƒαž–αž·αž…αžΆαžšαžŽαžΆαž–αžΈαž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αŸ†αž αž»αžŸαž“αŸ…αž€αŸ’αž“αž»αž„αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒαž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž—αžΆαž‚αžΈαž‘αž‘αž½αž›αž“αžΉαž„αž˜αž·αž“αž‘αž‘αž½αž›αž”αžΆαž“αž–αŸαžαŸŒαž˜αžΆαž“αžŽαžΆαž˜αž½αž™αž’αŸ†αž–αžΈαž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž…αž»αž„αž€αŸ’αžšαŸ„αž™αŸ”
αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž…αŸ†αž–αŸ„αŸ‡αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž•αž„αžŠαŸ‚αžšαž“αŸ…αž€αŸ’αž“αž»αž„ TCP αž‚αžΊαžŠαžΎαž˜αŸ’αž”αžΈαž”αž“αŸ’αžαŸ‚αž˜αžœαžΆαž›αžαŸ’αž˜αžΈαž˜αž½αž™αž‘αŸ…αž€αž‰αŸ’αž…αž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž›αžΎαž†αžΆαž“αŸ‚αž›αžŠαŸ‚αž›αž˜αž·αž“αž‚αž½αžšαž±αŸ’αž™αž‘αž»αž€αž…αž·αžαŸ’αžαžŠαŸ‚αž›αž‘αž‘αž½αž›αžšαž„αž€αžΆαžšαž”αž„αŸ’αžαžΌαž…αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™αž“αž·αž„αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“

αžšαž½αž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž”αž„αŸ’αžαžΌαž…αž‘αŸ’αžšαž„αŸ‹αž‘αŸ’αžšαžΆαž™ αž‡αžΆαž’αž€αž»αžŸαž› αž˜αžΆαž“αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžαžΆαž‰αŸ”
αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αž“αŸ’αžαž€αžΆαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαŸ–

  • αž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž–αž·αžαž“αŸƒαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“;
  • αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰αž“αžΌαžœαž€αž‰αŸ’αž…αž”αŸ‹αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž”αžΆαžαŸ‹αž‘αŸ…αž—αžΆαž‚αžΈαž‘αž‘αž½αž›αŸ”

αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡αž‘αŸ€αžαž”αž“αŸ’αžαŸ‚αž˜αž–αžΈαž›αžΎαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αžœαžΆαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžαŸ’αžšαžΌαžœαž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž—αžΆαž–αž“αŸƒαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒαž¬αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž‚αŸ’αž˜αžΆαž“αž’αŸ’αžœαžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž“αŸ„αŸ‡αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αžšαž”αžŸαŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž‚αž½αžšαž±αŸ’αž™αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ” αž€αŸ’αž“αž»αž„αž‚αŸ’αžšαž”αŸ‹αž€αžšαžŽαžΈαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ αž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαŸ– αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž–αŸαž›αžœαŸαž›αžΆ αž™αž“αŸ’αžαž€αžΆαžšαž“αŸαŸ‡αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαžšαžΆαž”αŸ‹αžαž™αž€αŸ’αžšαŸ„αž™ αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž€αŸ†αžŽαžαŸ‹αž…αž»αž„αž”αž‰αŸ’αž…αž”αŸ‹αž“αŸƒαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αžšαž„αŸ‹αž…αžΆαŸ†αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž‰αŸ’αž…αž”αŸ‹ αžŸαž»αž‘αŸ’αž’ TCPKeepAlive αžαŸ’αžšαžΌαžœαž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αž‘αŸ… 15 αžœαž·αž“αžΆαž‘αžΈαžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αŸ–

// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
    defaultTCPKeepAlive = 15 * time.Second
)

αž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž‡αžΌαž“αžαŸ’αžšαžΌαžœαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž–αŸαž›αžœαŸαž›αžΆαžšαžΆαž›αŸ‹αž–αŸαž›αžŠαŸ‚αž›αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“ (αž‘αžΆαŸ†αž„αž›αžΎαž€αž‘αžΈαž˜αž½αž™ αž“αž·αž„αž›αžΎαž€αž‘αžΈαž–αžΈαžš) αžŠαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΆαžšαžšαŸ†αžαžΆαž“αž–αžΈαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„ αž αžΎαž™αž”αž‰αŸ’αžˆαž”αŸ‹αžœαžΆαŸ”

αžŠαžΌαž…αŸ’αž“αŸαŸ‡ αž™αžΎαž„αž”αžΆαž“αžŸαŸ’αž‚αžΆαž›αŸ‹αž–αžΈαž‚αŸ„αž›αž‚αŸ†αž“αž·αžαžŸαŸ†αžαžΆαž“αŸ‹αŸ—αž“αŸƒαž–αž·αž’αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ–

  • αž˜αžΌαž›αž”αŸ’αž”αž‘αžΆαž“αž”αŸαžαŸ’αžš;
  • αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹;
  • αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„;
  • αžœαž·αž€αŸαž™αž”αŸαžαŸ’αžšαžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž“αž·αž„αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αŸ”

αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž“αŸ„αŸ‡αž˜αž·αž“αž˜αŸ‚αž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αž‘αŸ!

αž–αž·αž’αžΈαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžš

αž“αŸ…αž€αŸ’αž“αž»αž„αžœαŸ‰αžΆαžšαŸ’αž™αŸ‰αž„αŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž”αžΆαž“αž–αž·αž…αžΆαžšαžŽαžΆαžšαž½αž…αž αžΎαž™ αž–αž·αž’αžΈαž€αžΆαžšαž…αŸ‚αž€αž…αžΆαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αž‚αžΊαž‚αŸ’αž˜αžΆαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžαŸ’αž›αžΆαŸ†αž„αŸ” αžœαžΆαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜ "αž”αž“αŸ’αžαž™" αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αžŠαŸ‚αž›αž•αŸ’αžαž›αŸ‹αžŠαŸ„αž™αž”αžŽαŸ’αžαžΆαž‰αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž“αŸ…αž–αŸαž›αžŠαŸ‚αž› RTT αž€αžΎαž“αž‘αžΎαž„αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αžšαž”αžŸαŸ‹αžœαžΆ αž“αž·αž„αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŸαž˜αžαŸ’αžαž—αžΆαž–αž”αžŽαŸ’αžαžΆαž‰αž‘αŸ†αž“αžΆαž€αŸ‹αž‘αŸ†αž“αž„αž€αžΆαž“αŸ‹αžαŸ‚αž”αŸ’αžšαžŸαžΎαžš αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αŸ”

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž“αžΆαŸ†αž±αŸ’αž™αž˜αžΆαž“αŸ–

  • αž€αžΆαžšαž”αž„αŸ’αž€αžΎαž“αž‡αž½αžšαž“αŸƒαž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹ αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž€αž‰αŸ’αž…αž”αŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αžΆαŸ†αž„αž’αžŸαŸ‹ (αž›αžΎαž€αž›αŸ‚αž„αžαŸ‚αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰) αžαŸ’αžšαžΌαžœαžαŸ‚αž€αŸ†αžŽαžαŸ‹αž’αžαŸ’αžαžŸαž‰αŸ’αž‰αžΆαžŽαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹αŸ”
  • αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαž“αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸ…αž›αžΎαž•αŸ’αž“αŸ‚αž€αž”αž‰αŸ’αž‡αžΌαž“ αž“αž·αž„αž‘αž‘αž½αž›αŸ”

αž‡αž½αžšαž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹ αž“αž·αž„αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‘αŸ†αž αŸ†αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαžŸαž€αž˜αŸ’αž˜αž—αžΆαž–αžŠαŸ‚αž›αž–αž·αž’αžΈαž€αžΆαžšαžαŸ’αžšαžΌαžœαž’αŸ’αžœαžΎαž‘αžΎαž„αž€αŸ’αž“αž»αž„αž€αžΆαžšαž†αŸ’αž›αžΎαž™αžαž”αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαžαžΌαž…αžαžΆαžαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹ αž“αž·αž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸƒαž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž˜αžΆαž“αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžšαŸ’αžαž–αžΈαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αž€αŸ†αž αž»αžŸ:

  • αžαŸ’αžšαž‘αž”αŸ‹ N αž€αž‰αŸ’αž…αž”αŸ‹αžαŸ’αžšαž‘αž”αŸ‹αž˜αž€αžœαž·αž‰;
  • αž–αžΆαž€αŸ’αž™αžŠαžŠαŸ‚αž›αŸ—αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαŸ”

αžαŸ’αžšαž‘αž”αŸ‹ N packets - αž–αž·αž’αžΈαž€αžΆαžšαž”αž„αŸ’αž’αž½αž…αžšαž’αž·αž›

αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‚αŸ’αžšαžΉαŸ‡αž“αŸƒαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžαŸ’αžšαžΌαžœαžαŸ‚αž‚αžΆαŸ†αž‘αŸ’αžšαž–αŸ’αžšαžΉαžαŸ’αžαž·αž€αžΆαžšαžŽαŸαž”αžΈαž”αŸ’αžšαž—αŸαž‘αŸ–

  • αž αŸ…αžαžΆαž˜αž–αž·αž’αžΈαž€αžΆαžšαž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αŸ” αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž˜αž»αžαž„αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αŸαž αŸ…αžαžΆ "αž–αžΈαžαžΆαž„αž›αžΎ" αž—αžΆαž‚αžΈαž•αŸ’αž‰αžΎαžŠαŸ†αž”αžΌαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αž€αž˜αŸ’αžšαž·αžαž“αŸƒαž€αžΆαžšαž”αŸ†αž–αŸαž‰αž”αž„αŸ’αž’αž½αž… (αž“αŸ„αŸ‡αž‚αžΊαžœαžαŸ’αžαž˜αžΆαž“αžšαž”αžŸαŸ‹ N αž”αžΆαž“αž•αŸ’αž‰αžΎαžŸαžΆαžšαžŠαŸ‚αž›αž€αŸ†αž–αž»αž„αžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαž‘αž‘αž½αž›αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒ) αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž”αž„αŸ’αž’αž½αž…αž‘αž‘αŸ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αž˜αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαž αž“αž·αž„αž”αž‰αŸ’αž‡αžΌαž“ αž αžΎαž™αžαž˜αŸ’αž›αŸƒαž’αžαŸαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž‘αŸ αž—αžΆαž‚αžΈαž”αž‰αŸ’αž‡αžΌαž“αžαŸ’αžšαž‘αž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αž‘αŸ…αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž›αžΎ αž αžΎαž™αž“αŸαŸ‡αž‚αžΊαž‡αžΆαž€αžΆαžšαž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆ αž”αž„αŸ’αž’αž½αž…αž–αŸαž‰αž αžΎαž™αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž›αžΎαž“αžΉαž„αž–αŸ’αž™αžΆαž™αžΆαž˜αž”αž‰αŸ’αž‡αžΌαž“αž‘αž·αž“αŸ’αž“αž“αŸαž™αž˜αŸ’αžαž„αž‘αŸ€αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž–αŸαž›αžαŸ’αž›αŸ‡αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž·αž αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαž‘αŸ†αž“αž„αž‡αžΆαž“αžΉαž„αžšαžΆαžšαžΆαŸ†αž„αž‘αž·αž“αŸ’αž“αž“αŸαž™ (αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™αž€αžΆαžšαž•αŸ’αž‰αžΎαž—αŸ’αž›αžΆαž˜αŸ—) αž¬αž˜αžΆαž“αž™αž“αŸ’αžαž€αžΆαžšαž’αŸ’αžœαžΎαžŸαž˜αž€αžΆαž›αž€αž˜αŸ’αž˜ (αžŠαžΌαž…αž‡αžΆ semaphore αž¬αž‘αž„αŸ‹) αžŠαŸ‚αž›αž“αžΉαž„αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αžŸαŸ’αžšαž‘αžΆαž”αŸ‹αžαžΆαž„αž›αžΎαž αŸ…αž˜αž»αžαž„αžΆαžšαž•αŸ’αž‰αžΎαžαŸ‚αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž”αž„αŸ’αž’αž½αž…αž‘αž‘αŸαŸ” .
  • αž‘αž‘αž½αž›αž”αžΆαž“αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αŸ” αž“αŸ…αž€αŸ’αž“αž»αž„αž–αž·αž’αžΈαž€αžΆαžš αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹ N αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž‡αžΆαž‘αžΌαž‘αŸ…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸαž‰αžŠαŸ‚αž›αž”αž„αŸ’αž αžΆαž‰αžαžΆαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž˜αžΆαž“αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž˜αž»αž“ N αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αŸ”
  • αž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αžšαž„αŸ‹αž…αžΆαŸ†αž”αžΆαž“αž•αž»αžαž€αŸ†αžŽαžαŸ‹αž αžΎαž™αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ†αžŽαžαŸ‹αž€αžΆαžšαž–αž·αžαž“αŸƒαž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹ αž“αž·αž„αž€αžΆαžšαž–αž“αŸ’αž™αžΆαžšαž–αŸαž›αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž“αž·αž„αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒ αž–αž·αž’αžΈαž€αžΆαžšαž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž€αŸ†αžŽαžαŸ‹αž˜αŸ‰αŸ„αž„αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αž’αžŸαŸ‹αž–αŸαž›αž•αž»αžαž€αŸ†αžŽαžαŸ‹ αž—αžΆαž‚αžΈαž•αŸ’αž‰αžΎαž“αžΉαž„αž”αž‰αŸ’αž‡αžΌαž“αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αž·αž“αž”αžΆαž“αž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž”αžΆαž“αž•αŸ’αž‰αžΎαž‘αžΎαž„αžœαž·αž‰αŸ”

αž–αžΆαž€αŸ’αž™αžŠαžŠαŸ‚αž›αŸ—αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸ

αž“αŸ…αž–αŸαž›αžŠαŸ‚αž›αž‘αŸ†αž αŸ†αž”αž„αŸ’αž’αž½αž… αž“αž·αž„αž•αž›αž·αžαž•αž›αž–αž“αŸ’αž™αžΆαžšαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž˜αžΆαž“αž‘αŸ†αž αŸ†αž’αŸ† αž€αž‰αŸ’αž…αž”αŸ‹αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αž’αžΆαž…αžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαŸ” αž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž”αŸ‚αž”αž“αŸαŸ‡ αž€αŸ†αž αž»αžŸαž€αž‰αŸ’αž…αž”αŸ‹αžαŸ‚αž˜αž½αž™αž’αžΆαž…αž”αžŽαŸ’αžαžΆαž›αž±αŸ’αž™αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰ αžŠαŸ‚αž›αž—αžΆαž‚αž…αŸ’αžšαžΎαž“αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αžΆαž˜αž‘αžΆαžšαŸ”

αž§αž‘αžΆαž αžšαžŽαŸ:

αž›αŸ’αž’αž”αŸ†αž•αž»αžαŸ” αž‘αŸ’αžšαžΉαžŸαŸ’αžŠαžΈ αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαž˜αžΌαž›αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž’αž“αž»αžœαžαŸ’αžαž‡αžΆαž€αŸ‹αžŸαŸ’αžαŸ‚αž„ TCP. αž αžΎαž™αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž“αžšαžŽαžΆαž˜αŸ’αž“αžΆαž€αŸ‹αžŠαžΉαž„αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αž›αŸ’αž’αž”αŸ†αž•αž»αž - αž€αžΆαžšαžŸαŸ’αžœαžΆαž‚αž˜αž“αŸ.

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "strings"
)

func main() {
    // создаСм сокСт с ΠΏΠΎΡ€Ρ‚ΠΎΠΌ 
    ln, err := net.Listen("tcp", ":8081")
    if err != nil {
        log.Fatalln(err)
    }
    // ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²Ρ‹Π·ΠΎΠ²Π°
    conn, _ := ln.Accept()

    for {
        // считываниС Π΄Π°Π½Π½Ρ‹Ρ…
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // Π²Ρ‹Π²ΠΎΠ΄ сообщСния Π² stdout
        fmt.Print("Message Received:", string(msg))
        // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр
        newMsg := strings.ToUpper(msg)
        // ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…
        conn.Write([]byte(newMsg + "n"))
    }
}

αž’αžαž·αžαž·αž‡αž“

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "os"
)

func main() {
    // установка соСдинСния
    conn, err := net.Dial("tcp", "127.0.0.1:8081")
    if err != nil {
        log.Fatalln(err)
    }

    for {
        // считываниС Π΄Π°Π½Π½Ρ‹Ρ… с stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Text to send: ")
        // построчно
        text, err := reader.ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠ°
        fmt.Fprintf(conn, text+"n")
        // ΠΏΡ€ΠΈΠ΅ΠΌ
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°
        fmt.Print("Msg from Server: " + msg)
    }
}

αžŸαŸαž…αž€αŸ’αžαžΈαžŸαž“αŸ’αž“αž·αžŠαŸ’αž‹αžΆαž“

αž™αž“αŸ’αžαž€αžΆαžšαžŠαžΎαž˜αŸ’αž”αžΈαž’αžΆαž“αžΆαž”αžΆαž“αž“αžΌαžœαž€αžΆαžšαž•αŸ’αž‘αŸαžšαž‘αž·αž“αŸ’αž“αž“αŸαž™ αž“αž·αž„αž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αžŠαŸ‚αž›αž’αžΆαž…αž‘αž»αž€αž…αž·αžαŸ’αžαž”αžΆαž“αŸ”

αž™αž“αŸ’αžαž€αžΆαžš
αž–αžΆαž€αŸ’αž™αžŸαŸ’αž“αžΎαžŸαž»αŸ†, αž™αŸ„αž”αž›αŸ‹

αž–αž·αž“αž·αžαŸ’αž™αž•αž›αž”αžΌαž€
αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαžšαž€αž˜αžΎαž›αž€αŸ†αž αž»αžŸαž”αŸŠαžΈαžαž“αŸ…αž€αŸ’αž“αž»αž„αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“

αž–αŸαž›αžœαŸαž›αžΆ
αžšαžΆαž”αŸ‹β€‹αž…αž“αŸ’αž›αŸ„αŸ‡β€‹αž–αŸαž›β€‹αž’αžŸαŸ‹β€‹αž–αŸαž› αž αžΎαž™β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αžαžΆβ€‹αž–αŸαž›β€‹αžŽαžΆβ€‹αžœαžΆβ€‹αž•αž»αžβ€‹αž€αŸ†αžŽαžαŸ‹αŸ” αž€αŸ’αžšαŸ„αž™αž˜αž€αž‘αŸ€αžαž˜αžΆαž“αž“αŸαž™αžαžΆ αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αž˜αŸ’αžšαž·αžαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž”αŸ’αžšαžΌαž”αžΆαž”αŸŠαžΈαž›αžΈαžαŸ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“ αž¬αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒαžšαž”αžŸαŸ‹αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αŸ†αž‘αž»αž„αž–αŸαž›αž”αž‰αŸ’αž‡αžΌαž“αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“αžŠαŸ„αž™αž˜αžΆαž“αž€αžΆαžšαž–αž“αŸ’αž™αžΆαž–αŸαž› αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž˜αž·αž“αž”αžΆαžαŸ‹αž”αž„αŸ‹ (αž€αžΆαžšαž•αž»αžαž€αŸ†αžŽαžαŸ‹αž˜αž»αž“αž“αŸƒαž…αž“αŸ’αž›αŸ„αŸ‡αž–αŸαž›αž“αŸƒαž–αŸαž›αžœαŸαž›αžΆ) αž¬αž”αž„αŸ’αž€αžΆαž“αŸ‹αžŠαŸƒαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αžΆαžαŸ‹αž”αž„αŸ‹ αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž‘αžΎαž„αžœαž·αž‰αž“αžΆαŸ†αž‘αŸ…αžŠαž›αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αž‘αž½αž“αž“αŸ…αž•αŸ’αž“αŸ‚αž€αž‘αž‘αž½αž›αŸ”

αž›αŸαžβ€‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹
αž”αŸ’αžšαžΎαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž›αŸαžαžšαŸ€αž„αž”αž“αŸ’αžαž”αž“αŸ’αž‘αžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαŸ‚αž›αž”αžΆαž“αž”αž‰αŸ’αž‡αžΌαž“αž–αžΈαž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαž‘αŸ…αž’αŸ’αž“αž€αž‘αž‘αž½αž›αŸ” αž‚αž˜αŸ’αž›αžΆαžαž“αŸ…αž€αŸ’αž“αž»αž„αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž‘αž‘αž½αž›αž”αžΆαž“αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž‘αž‘αž½αž›αžšαž€αžƒαžΎαž‰αž€αžΆαžšαž”αžΆαžαŸ‹αž”αž„αŸ‹αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαžΌαž…αž‚αŸ’αž“αžΆαž˜αžΆαž“αž“αŸαž™αžαžΆ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŸαŸ’αž‘αž½αž“αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹
αž”αž„αŸ’αž€αžΎαžβ€‹αžŠαŸ„αž™β€‹αž…αž»αž„β€‹αž‘αž‘αž½αž› αž“αž·αž„β€‹αž”αž„αŸ’αž αžΆαž‰β€‹αžŠαž›αŸ‹β€‹αž…αž»αž„β€‹αž•αŸ’αž‰αžΎβ€‹αžαžΆβ€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αž–αŸαžαŸŒαž˜αžΆαž“β€‹αžŠαŸ‚αž›β€‹αžαŸ’αžšαžΌαžœβ€‹αž‚αŸ’αž“αžΆβ€‹αž¬β€‹αž€αŸ’αžšαž»αž˜β€‹αž€αž‰αŸ’αž…αž”αŸ‹β€‹αžαŸ’αžšαžΌαžœβ€‹αž”αžΆαž“β€‹αž‘αž‘αž½αž›β€‹αžŠαŸ„αž™β€‹αž‡αŸ„αž‚αž‡αŸαž™αŸ” αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆ αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž˜αžΆαž“αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž”αžΆαž“αž‘αž‘αž½αž›αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αŸ” αž’αžΆαžŸαŸ’αžšαŸαž™αž›αžΎαž–αž·αž’αžΈαž€αžΆαžš αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž”αž»αž‚αŸ’αž‚αž› αž“αž·αž„αž€αŸ’αžšαž»αž˜αžαŸ’αžšαžΌαžœαž”αžΆαž“αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹

αž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“
αž”αŸ’αžšαžΎαžŠαŸ„αž™αž’αŸ’αž“αž€αž‘αž‘αž½αž› αžŠαžΎαž˜αŸ’αž”αžΈαž‡αžΌαž“αžŠαŸ†αžŽαžΉαž„αžŠαž›αŸ‹αž’αŸ’αž“αž€αž•αŸ’αž‰αžΎαžαžΆ αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αž˜αž·αž“αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αž’αžœαž·αž‡αŸ’αž‡αž˜αžΆαž“αž‡αžΆαž’αž˜αŸ’αž˜αžαžΆαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αž“αŸƒαž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αžŠαŸ‚αž›αž˜αž·αž“αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‘αž‘αž½αž›αžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ”

αž”αž„αŸ’αž’αž½αž…, αž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“
αž€αŸ†αžŽαžαŸ‹αž‡αž½αžšαž“αŸƒαž›αŸαžαž›αŸ†αžŠαžΆαž”αŸ‹αžŠαŸ‚αž›αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž‡αžΌαž“αž€αž‰αŸ’αž…αž”αŸ‹αž–αŸαžαŸŒαž˜αžΆαž“αŸ” Multicast αž“αž·αž„αž€αžΆαžšαž…αžΆαž”αŸ‹αžŠαŸƒαž’αžΆαž…αž”αž„αŸ’αž€αžΎαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž·αž’αžΈαž€αžΆαžšαž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž”αžΎαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž€αžΆαžšαžšαž„αŸ‹αž…αžΆαŸ†αž€αžΆαžšαž‘αž‘αž½αž›αžŸαŸ’αž‚αžΆαž›αŸ‹αŸ” αžŠαžΌαž…αžŠαŸ‚αž›αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰ αž‘αŸ†αž αŸ†αž”αž„αŸ’αž’αž½αž…αž’αžΆαž…αžαŸ’αžšαžΌαžœαž”αžΆαž“αž‚αžŽαž“αžΆαžŠαŸ„αž™αž•αŸ’αž’αŸ‚αž€αž›αžΎαžŸαž˜αžαŸ’αžαž—αžΆαž–αž‘αž‘αž½αž› αž“αž·αž„αžŸαžαž·αž”αžŽαŸ’αžŠαŸ„αŸ‡αž’αžΆαžŸαž“αŸ’αž“αž“αŸƒαž…αž»αž„αž‘αž‘αž½αž› αž€αŸαžŠαžΌαž…αž‡αžΆαž€αž˜αŸ’αžšαž·αžαž•αŸ’αž‘αž»αž€αž”αžŽαŸ’αžαžΆαž‰

αž§αž‘αžΆαž αžšαžŽαŸαž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαž“αŸƒαž€αžΆαžšαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹ Go αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αžŽαŸ’αžαžΆαž‰

Π’ αžƒαŸ’αž›αžΆαŸ†αž„.

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹