mirror of
https://github.com/tinygo-org/net.git
synced 2026-08-21 12:59:00 +00:00
refurbish internal netdever interface to use netip types instead of net.IP
This commit is contained in:
@@ -3,6 +3,7 @@
|
|||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net/netip"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -48,18 +49,18 @@ type netdever interface {
|
|||||||
|
|
||||||
// GetHostByName returns the IP address of either a hostname or IPv4
|
// GetHostByName returns the IP address of either a hostname or IPv4
|
||||||
// address in standard dot notation
|
// 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
|
// GetIPAddr returns IP address assigned to the interface, either by
|
||||||
// DHCP or statically
|
// DHCP or statically
|
||||||
GetIPAddr() (IP, error)
|
Addr() (netip.Addr, error)
|
||||||
|
|
||||||
// Berkely Sockets-like interface, Go-ified. See man page for socket(2), etc.
|
// Berkely Sockets-like interface, Go-ified. See man page for socket(2), etc.
|
||||||
Socket(domain int, stype int, protocol int) (int, error)
|
Socket(domain int, stype int, protocol int) (int, error)
|
||||||
Bind(sockfd int, ip IP, port int) error
|
Bind(sockfd int, ip netip.AddrPort) error
|
||||||
Connect(sockfd int, host string, ip IP, port int) error
|
Connect(sockfd int, host string, ip netip.AddrPort) error
|
||||||
Listen(sockfd int, backlog int) 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)
|
Send(sockfd int, buf []byte, flags int, deadline time.Time) (int, error)
|
||||||
Recv(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
|
Close(sockfd int) error
|
||||||
|
|||||||
+11
-6
@@ -7,6 +7,7 @@
|
|||||||
package net
|
package net
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"internal/itoa"
|
"internal/itoa"
|
||||||
"io"
|
"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 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
|
// 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 {
|
switch network {
|
||||||
case "tcp", "tcp4":
|
case "tcp", "tcp4":
|
||||||
default:
|
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
|
// 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() {
|
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)
|
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
|
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)
|
netdev.Close(fd)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -244,7 +248,7 @@ type listener struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (l *listener) Accept() (Conn, error) {
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -270,7 +274,8 @@ func listenTCP(laddr *TCPAddr) (Listener, error) {
|
|||||||
return nil, err
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -11,6 +11,7 @@ package net
|
|||||||
import (
|
import (
|
||||||
"internal/itoa"
|
"internal/itoa"
|
||||||
"io"
|
"io"
|
||||||
|
"net/netip"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -61,8 +62,8 @@ func DialTLS(addr string) (*TLSConn, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
addrport := netip.AddrPortFrom(netip.Addr{}, uint16(port))
|
||||||
if err = netdev.Connect(fd, host, IP{}, port); err != nil {
|
if err = netdev.Connect(fd, host, addrport); err != nil {
|
||||||
netdev.Close(fd)
|
netdev.Close(fd)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -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 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
|
// 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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
laddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(laddr.IP)), uint16(laddr.Port))
|
||||||
|
|
||||||
// Local bind
|
// Local bind
|
||||||
err = netdev.Bind(fd, laddr.IP, laddr.Port)
|
err = netdev.Bind(fd, laddrport)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
netdev.Close(fd)
|
netdev.Close(fd)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
raddrport := netip.AddrPortFrom(netip.AddrFrom4([4]byte(raddr.IP)), uint16(raddr.Port))
|
||||||
// Remote connect
|
// Remote connect
|
||||||
if err = netdev.Connect(fd, "", raddr.IP, raddr.Port); err != nil {
|
if err = netdev.Connect(fd, "", raddrport); err != nil {
|
||||||
netdev.Close(fd)
|
netdev.Close(fd)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user