@@ -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 }
@@ -252,57 +253,13 @@ func determineSSHLocalPort(confLocalPort int, instName string) (int, error) {
252253 // use hard-coded value for "default" instance, for backward compatibility
253254 return 60022 , nil
254255 }
255- sshLocalPort , err := findFreeTCPLocalPort ()
256+ sshLocalPort , err := freeport . TCP ()
256257 if err != nil {
257258 return 0 , fmt .Errorf ("failed to find a free port, try setting `ssh.localPort` manually: %w" , err )
258259 }
259260 return sshLocalPort , nil
260261}
261262
262- func findFreeTCPLocalPort () (int , error ) {
263- lAddr0 , err := net .ResolveTCPAddr ("tcp4" , "127.0.0.1:0" )
264- if err != nil {
265- return 0 , err
266- }
267- l , err := net .ListenTCP ("tcp4" , lAddr0 )
268- if err != nil {
269- return 0 , err
270- }
271- defer l .Close ()
272- lAddr := l .Addr ()
273- lTCPAddr , ok := lAddr .(* net.TCPAddr )
274- if ! ok {
275- return 0 , fmt .Errorf ("expected *net.TCPAddr, got %v" , lAddr )
276- }
277- port := lTCPAddr .Port
278- if port <= 0 {
279- return 0 , fmt .Errorf ("unexpected port %d" , port )
280- }
281- return port , nil
282- }
283-
284- func findFreeUDPLocalPort () (int , error ) {
285- lAddr0 , err := net .ResolveUDPAddr ("udp4" , "127.0.0.1:0" )
286- if err != nil {
287- return 0 , err
288- }
289- l , err := net .ListenUDP ("udp4" , lAddr0 )
290- if err != nil {
291- return 0 , err
292- }
293- defer l .Close ()
294- lAddr := l .LocalAddr ()
295- lUDPAddr , ok := lAddr .(* net.UDPAddr )
296- if ! ok {
297- return 0 , fmt .Errorf ("expected *net.UDPAddr, got %v" , lAddr )
298- }
299- port := lUDPAddr .Port
300- if port <= 0 {
301- return 0 , fmt .Errorf ("unexpected port %d" , port )
302- }
303- return port , nil
304- }
305-
306263func (a * HostAgent ) emitEvent (_ context.Context , ev events.Event ) {
307264 a .eventEncMu .Lock ()
308265 defer a .eventEncMu .Unlock ()
0 commit comments