refurbish internal netdever interface to use netip types instead of net.IP

This commit is contained in:
soypat
2023-11-29 11:49:00 -08:00
committed by Ron Evans
parent 7c11b88ce6
commit f3548296e1
4 changed files with 25 additions and 16 deletions
+6 -5
View File
@@ -3,6 +3,7 @@
package net
import (
"net/netip"
"time"
)
@@ -48,18 +49,18 @@ type netdever interface {
// GetHostByName returns the IP address of either a hostname or IPv4
// address in standard dot notation
GetHostByName(name string) (IP, error)
GetHostByName(name string) (netip.Addr, error)
// GetIPAddr returns IP address assigned to the interface, either by
// DHCP or statically
GetIPAddr() (IP, error)
Addr() (netip.Addr, error)
// Berkely Sockets-like interface, Go-ified. See man page for socket(2), etc.
Socket(domain int, stype int, protocol int) (int, error)
Bind(sockfd int, ip IP, port int) error
Connect(sockfd int, host string, ip IP, port int) error
Bind(sockfd int, ip netip.AddrPort) error
Connect(sockfd int, host string, ip netip.AddrPort) error
Listen(sockfd int, backlog int) error
Accept(sockfd int, ip IP, port int) (int, error)
Accept(sockfd int, ip netip.AddrPort) (int, error)
Send(sockfd int, buf []byte, flags int, deadline time.Time) (int, error)
Recv(sockfd int, buf []byte, flags int, deadline time.Time) (int, error)
Close(sockfd int) error
+11 -6
View File
@@ -7,6 +7,7 @@
package net
import (
"errors"
"fmt"
"internal/itoa"
"io"
@@ -114,7 +115,7 @@ func ResolveTCPAddr(network, address string) (*TCPAddr, error) {
return nil, fmt.Errorf("Lookup of host name '%s' failed: %s", host, err)
}
return &TCPAddr{IP: ip, Port: port}, nil
return &TCPAddr{IP: ip.AsSlice(), Port: port}, nil
}
// TCPConn is an implementation of the Conn interface for TCP network
@@ -140,7 +141,7 @@ func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
switch network {
case "tcp", "tcp4":
default:
return nil, fmt.Errorf("Network '%s' not supported", network)
return nil, errors.New("Network not supported: '" + network + "'")
}
// TINYGO: Use netdev to create TCP socket and connect
@@ -150,7 +151,9 @@ func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
}
if raddr.IP.IsUnspecified() {
return nil, fmt.Errorf("Sorry, localhost isn't available on Tinygo")
return nil, errors.New("Sorry, localhost isn't available on Tinygo")
} else if len(raddr.IP) != 4 {
return nil, errors.New("only ipv4 supported")
}
fd, err := netdev.Socket(_AF_INET, _SOCK_STREAM, _IPPROTO_TCP)
@@ -158,7 +161,8 @@ func DialTCP(network string, laddr, raddr *TCPAddr) (*TCPConn, error) {
return nil, err
}
if err = netdev.Connect(fd, "", raddr.IP, raddr.Port); err != nil {
raddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(raddr.IP)), uint16(raddr.Port))
if err = netdev.Connect(fd, "", raddrport); err != nil {
netdev.Close(fd)
return nil, err
}
@@ -244,7 +248,7 @@ type listener struct {
}
func (l *listener) Accept() (Conn, error) {
fd, err := netdev.Accept(l.fd, IP{}, 0)
fd, err := netdev.Accept(l.fd, netip.AddrPort{})
if err != nil {
return nil, err
}
@@ -270,7 +274,8 @@ func listenTCP(laddr *TCPAddr) (Listener, error) {
return nil, err
}
err = netdev.Bind(fd, laddr.IP, laddr.Port)
laddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(laddr.IP)), uint16(laddr.Port))
err = netdev.Bind(fd, laddrport)
if err != nil {
return nil, err
}
+3 -2
View File
@@ -11,6 +11,7 @@ package net
import (
"internal/itoa"
"io"
"net/netip"
"strconv"
"time"
)
@@ -61,8 +62,8 @@ func DialTLS(addr string) (*TLSConn, error) {
if err != nil {
return nil, err
}
if err = netdev.Connect(fd, host, IP{}, port); err != nil {
addrport := netip.AddrPortFrom(netip.Addr{}, uint16(port))
if err = netdev.Connect(fd, host, addrport); err != nil {
netdev.Close(fd)
return nil, err
}
+5 -3
View File
@@ -109,7 +109,7 @@ func ResolveUDPAddr(network, address string) (*UDPAddr, error) {
return nil, fmt.Errorf("Lookup of host name '%s' failed: %s", host, err)
}
return &UDPAddr{IP: ip, Port: port}, nil
return &UDPAddr{IP: ip.AsSlice(), Port: port}, nil
}
// UDPConn is the implementation of the Conn and PacketConn interfaces
@@ -172,16 +172,18 @@ func DialUDP(network string, laddr, raddr *UDPAddr) (*UDPConn, error) {
if err != nil {
return nil, err
}
laddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(laddr.IP)), uint16(laddr.Port))
// Local bind
err = netdev.Bind(fd, laddr.IP, laddr.Port)
err = netdev.Bind(fd, laddrport)
if err != nil {
netdev.Close(fd)
return nil, err
}
raddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(raddr.IP)), uint16(raddr.Port))
// Remote connect
if err = netdev.Connect(fd, "", raddr.IP, raddr.Port); err != nil {
if err = netdev.Connect(fd, "", raddrport); err != nil {
netdev.Close(fd)
return nil, err
}