You might find this helpful https://eli.thegreenplace.net/2019/unix-domain-sockets-in-go/
> On Feb 15, 2020, at 5:37 PM, robert engels <[email protected]> wrote: > > You really should ‘panic on err’ when diagnosing these sort of issues - > because I need the full error information. > > That being said, if you ‘Connect()’ then many times you can’t use Sendto(), > you need to use Send() - or don’t Connect(). > > When you “Connect” you are connecting the socket which controls the > destination for packets. > >> On Feb 15, 2020, at 5:25 PM, Gert <[email protected] >> <mailto:[email protected]>> wrote: >> >> Another attempt but now I get `socket is already connected` >> >> https://play.golang.org/p/-klJZPnKFRk <https://play.golang.org/p/-klJZPnKFRk> >> >> On Saturday, February 15, 2020 at 8:53:46 PM UTC+1, Gert wrote: >> Thx when looking for Recv() and Send() I found this package >> https://pkg.go.dev/golang.org/x/sys/unix >> <https://pkg.go.dev/golang.org/x/sys/unix> >> >> I don't understand how I'm suppose to create a new SockaddrUnix when raw is >> a private field? >> >> https://play.golang.org/p/fe1f_A92BgI <https://play.golang.org/p/fe1f_A92BgI> >> >> Also don't know if my strcpy is the way to fill in path? >> >> On Saturday, February 15, 2020 at 4:31:00 PM UTC+1, Robert Engels wrote: >> You want to use Recv() and Send() not Read() and Write() in order to get the >> address information. >> >> Read() and Write() are for connected sockets and usually streaming. >> >>> On Feb 15, 2020, at 9:27 AM, Robert Engels <[email protected] <>> wrote: >>> >>> >>> Sorry. I missed the part about “domain” socket. >>> >>>> On Feb 15, 2020, at 9:26 AM, Robert Engels <[email protected] <>> wrote: >>>> >>>> >>>> See github.com/robaho/go-trader <http://github.com/robaho/go-trader> for >>>> an example of sending / receiving udp traffic. There’s no reason to use >>>> the low level Unix interfaces. >>>> >>>>> On Feb 15, 2020, at 9:22 AM, Gert <[email protected] <>> wrote: >>>>> >>>>> >>>>> Hi, leaving out a lot of details I basically do this in a C client >>>>> >>>>> fd = socket(PF_UNIX, SOCK_DGRAM, 0) >>>>> bind(fd, (struct sockaddr*) &client,sizeof(struct sockaddr_un) >>>>> connect(fd, (struct sockaddr*) &server,sizeof(struct sockaddr_un) >>>>> send(fd, buff, strlen(buff)+1, 0) >>>>> recv(fd, buff, 8192, 0) >>>>> >>>>> Which means I have a client socket where I receive datagrams and a server >>>>> socket where I sent datagrams to. >>>>> >>>>> It works in my C client above but having troubles understanding how to >>>>> talk to the same C server using a Go client instead. This is my attempt >>>>> >>>>> >>>>> addr, err :=net.ResolveUnixAddr("unixgram","client.sock") >>>>> if err != nil { >>>>> log.Fatal(err) >>>>> } >>>>> >>>>> client, err :=net.ListenUnixgram("unixgram", addr) >>>>> if err != nil { >>>>> log.Fatal(err) >>>>> } >>>>> defer client.Close() >>>>> >>>>> server, err := net.Dial("unixgram","server.sock") >>>>> if err != nil { >>>>> log.Fatal(err) >>>>> } >>>>> defer server.Close() >>>>> >>>>> _, err = server.Write([]byte("hi")) >>>>> if err != nil { >>>>> log.Fatal(err) >>>>> } >>>>> >>>>> buf := make([]byte, 1024) >>>>> n, err := client.Read(buf[:]) >>>>> if err != nil { >>>>> println(err) >>>>> } >>>>> println(string(buf[0:n])) >>>>> >>>>> if err := os.RemoveAll("client.sock");err != nil { >>>>> log.Fatal(err) >>>>> } >>>>> >>>>> >>>>> What happens in the Go implementation is that it successfully send a >>>>> datagram, the server receives it but then the server can't figure out >>>>> where to send a answer back with a error from the server sendto: `No such >>>>> file or directory` >>>>> >>>>> This is basically what the the C server code is doing. >>>>> >>>>> recvfrom(fd, buff, 8192, 0, (structsockaddr*) &client, &len) >>>>> sendto(fd, buff, strlen(buff)+1, 0,(struct sockaddr*) &client, len) >>>>> >>>>> My socket knowledge is limited and https://golang.org/pkg/net/ >>>>> <https://golang.org/pkg/net/> is overwhelming, if I would make a guess is >>>>> that de C client shares fd between bind and connect and my Go >>>>> implementation doesn't ? >>>>> >>>>> >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google Groups >>>>> "golang-nuts" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send an >>>>> email to [email protected] <>. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/golang-nuts/644fa128-96c9-47f8-abc5-5fcc19d01e6e%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/golang-nuts/644fa128-96c9-47f8-abc5-5fcc19d01e6e%40googlegroups.com?utm_medium=email&utm_source=footer>. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "golang-nuts" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] >> <mailto:[email protected]>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/golang-nuts/a2c197f9-ceb2-49d7-af4d-f8485a5b69ba%40googlegroups.com >> >> <https://groups.google.com/d/msgid/golang-nuts/a2c197f9-ceb2-49d7-af4d-f8485a5b69ba%40googlegroups.com?utm_medium=email&utm_source=footer>. > > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > <mailto:[email protected]>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/31368C87-06E2-4444-BED9-A4A1763C39AF%40ix.netcom.com > > <https://groups.google.com/d/msgid/golang-nuts/31368C87-06E2-4444-BED9-A4A1763C39AF%40ix.netcom.com?utm_medium=email&utm_source=footer>. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/F7B22346-8F82-42FA-8D76-55AB04759D16%40ix.netcom.com.
