@@ -22,6 +22,7 @@ import (
2222 "github.com/lima-vm/lima/pkg/cidata"
2323 "github.com/lima-vm/lima/pkg/driver"
2424 "github.com/lima-vm/lima/pkg/driverutil"
25+ "github.com/lima-vm/lima/pkg/freeport"
2526 guestagentapi "github.com/lima-vm/lima/pkg/guestagent/api"
2627 guestagentclient "github.com/lima-vm/lima/pkg/guestagent/api/client"
2728 hostagentapi "github.com/lima-vm/lima/pkg/hostagent/api"
@@ -108,11 +109,11 @@ func New(instName string, stdout io.Writer, signalCh chan os.Signal, opts ...Opt
108109
109110 var udpDNSLocalPort , tcpDNSLocalPort int
110111 if * inst .Config .HostResolver .Enabled {
111- udpDNSLocalPort , err = findFreeUDPLocalPort ()
112+ udpDNSLocalPort , err = freeport . UDP ()
112113 if err != nil {
113114 return nil , err
114115 }
115- tcpDNSLocalPort , err = findFreeTCPLocalPort ()
116+ tcpDNSLocalPort , err = freeport . TCP ()
116117 if err != nil {
117118 return nil , err
118119 }
@@ -123,7 +124,7 @@ func New(instName string, stdout io.Writer, signalCh chan os.Signal, opts ...Opt
123124 if * inst .Config .VMType == limayaml .VZ {
124125 vSockPort = 2222
125126 } else if * inst .Config .VMType == limayaml .WSL2 {
126- port , err := getFreeVSockPort ()
127+ port , err := freeport . VSock ()
127128 if err != nil {
128129 logrus .WithError (err ).Error ("failed to get free VSock port" )
129130 }
@@ -250,57 +251,13 @@ func determineSSHLocalPort(confLocalPort int, instName string) (int, error) {
250251 // use hard-coded value for "default" instance, for backward compatibility
251252 return 60022 , nil
252253 }
253- sshLocalPort , err := findFreeTCPLocalPort ()
254+ sshLocalPort , err := freeport . TCP ()
254255 if err != nil {
255256 return 0 , fmt .Errorf ("failed to find a free port, try setting `ssh.localPort` manually: %w" , err )
256257 }
257258 return sshLocalPort , nil
258259}
259260
260- func findFreeTCPLocalPort () (int , error ) {
261- lAddr0 , err := net .ResolveTCPAddr ("tcp4" , "127.0.0.1:0" )
262- if err != nil {
263- return 0 , err
264- }
265- l , err := net .ListenTCP ("tcp4" , lAddr0 )
266- if err != nil {
267- return 0 , err
268- }
269- defer l .Close ()
270- lAddr := l .Addr ()
271- lTCPAddr , ok := lAddr .(* net.TCPAddr )
272- if ! ok {
273- return 0 , fmt .Errorf ("expected *net.TCPAddr, got %v" , lAddr )
274- }
275- port := lTCPAddr .Port
276- if port <= 0 {
277- return 0 , fmt .Errorf ("unexpected port %d" , port )
278- }
279- return port , nil
280- }
281-
282- func findFreeUDPLocalPort () (int , error ) {
283- lAddr0 , err := net .ResolveUDPAddr ("udp4" , "127.0.0.1:0" )
284- if err != nil {
285- return 0 , err
286- }
287- l , err := net .ListenUDP ("udp4" , lAddr0 )
288- if err != nil {
289- return 0 , err
290- }
291- defer l .Close ()
292- lAddr := l .LocalAddr ()
293- lUDPAddr , ok := lAddr .(* net.UDPAddr )
294- if ! ok {
295- return 0 , fmt .Errorf ("expected *net.UDPAddr, got %v" , lAddr )
296- }
297- port := lUDPAddr .Port
298- if port <= 0 {
299- return 0 , fmt .Errorf ("unexpected port %d" , port )
300- }
301- return port , nil
302- }
303-
304261func (a * HostAgent ) emitEvent (_ context.Context , ev events.Event ) {
305262 a .eventEncMu .Lock ()
306263 defer a .eventEncMu .Unlock ()
0 commit comments