LINUX.ORG.RU

дескриптор сокета

 


0

2

При использовании net.Dial получаю *net.TCPConn

package main
import (
        "net"
        "os"
        "log"
        "reflect"
)
func main() {

        c, err := net.Dial("tcp", "87.250.250.242:80")
        if err != nil {

                log.Printf("ERROR04: %s\n", err)
                os.Exit(1)
        }

        log.Println("type of c:", reflect.TypeOf(c))
        os.Exit(0)
}

Хочу соединения загонять в map и адресовать их по дескриптору сокета (int). Как мне получить дескриптор сокета (int)? Подскажите плиз

★★

Последнее исправление: quester (всего исправлений: 1)

Тебе хочется странного, но в общем случае ты ищешь скорее всего sync.Pool.

beastie ★★★★★
()
Ответ на: комментарий от monk

смотрю вторую ссылку. смотрю в книгу - вижу фигу. видать что-то я еще не знаю в go. как это вызывать?

вот есть у меня RawConn:

x, err := c.(*net.TCPConn).SyscallConn()

как из x вызывать Control?

quester ★★
() автор топика
Ответ на: комментарий от quester

Функция, которая принимает один целочисленный аргумент. Ты должен её написать. Значение этого аргумента и будет дескриптор.

Правда никто не гарантирует, что после возврата из функции соединение не оборвётся/восстановится и дескриптор в нём не сменится.

monk ★★★★★
()
Ответ на: комментарий от quester

На случай, если ты что-то хочешь сделать с дескриптором, чего интерфейс TCPConn не умеет. ioctl или ещё что-нибудь подобное.

А вот нафига нужно хранить вытащенный из объекта дескриптор — это действительно вопрос. Но к тебе.

monk ★★★★★
()
Ответ на: комментарий от monk

А вот нафига нужно хранить вытащенный из объекта дескриптор — это действительно вопрос. Но к тебе.

дескриптор хочу использовать как ключ в map в котором хранить открытые соединения. когда сервис гаситься - не просто закрывать соединения, а закрывать через shutdown (CloseRead(), CloseWrite()) ибо сервис к которому идет подключение хочет это иначе у него срывает крышу.

quester ★★
() автор топика
Ответ на: комментарий от quester

дескриптор хочу использовать как ключ в map в котором хранить открытые соединения.

Так само соединение и считай ключом.

monk ★★★★★
()
Ответ на: комментарий от monk

Так само соединение и считай ключом.

Так и хотел. Но что-то не вышло, а сейчас попробовал и получилось:

var socket_map = make(map[net.Conn]bool)
socket_map[c] = false

Спасибо, это и заюзаем)))

quester ★★
() автор топика

.File().Fd()

anonymous
()
Ответ на: комментарий от quester

Можешь всё же в краце изьяснить цель твоих изыскаиний (какую задачу ты пытаешься решить)? Ибо у меня стойкое впечатление, что ты целишься себе в ногу.

beastie ★★★★★
()
Ответ на: комментарий от beastie

так я описал:

дескриптор хочу использовать как ключ в map в котором хранить открытые соединения. когда сервис гаситься - не просто закрывать соединения, а закрывать через shutdown (CloseRead(), CloseWrite()) ибо сервис к которому идет подключение хочет это иначе у него срывает крышу.

по факту задача решена, спасибо

quester ★★
() автор топика
Ответ на: комментарий от quester

Это не постановка задачи, а не твоё представление её решения. Но ладно, проехали.

beastie ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.