@DKENdhdhdasd

Кросс компиляция syscall?

Я использую syscall для отправки пакета, но при компиляции с линукса на виндус (GOOS=windows go build .) у меня вылетает ошибка.
cannot use fd (variable of type int) as syscall.Handle value in argument to syscall.Sendto


Я полазил в интернете и нашел причину
Функция на windows:
func SetsockoptInt(fd Handle, level, opt int, value int) (err error)


функция на linux:
func SetsockoptInt(fd, level, opt int, value int) (err error) {


но адекватное решение не нашел )
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 3
OrlovEvgenii
@OrlovEvgenii
golang developer / DevOps
Используй syscall.Handle для файла дескриптора fd

syscall.Sendto(syscall.Handle(fd), data, 0, &syscall.SockaddrInet4{Port: port, Addr: [4]byte{127, 0, 0, 1}})
....
syscall.SetsockoptInt(syscall.Handle(fd), syscall.SOL_SOCKET, syscall.SO_REUSEADDR, 1)
Ответ написан
@12rbah
В ряде случаев сисколы могут наверное быть совместимы, но конкретно в случае с сокетами под виндой и лунксом есть отличия как в их работе так и в программировании, но если вам это нужно то придется отдельную функцию писать.
Ответ написан
@falconandy
Почитайте про Build Tags и File Suffixes (например https://www.phillipsj.net/posts/cross-platform-go-..., https://dave.cheney.net/2013/10/12/how-to-use-cond...)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы