@@ -22,6 +22,7 @@ import (
22
22
"github.com/lima-vm/lima/pkg/cidata"
23
23
"github.com/lima-vm/lima/pkg/driver"
24
24
"github.com/lima-vm/lima/pkg/driverutil"
25
+ "github.com/lima-vm/lima/pkg/freeport"
25
26
guestagentapi "github.com/lima-vm/lima/pkg/guestagent/api"
26
27
guestagentclient "github.com/lima-vm/lima/pkg/guestagent/api/client"
27
28
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
108
109
109
110
var udpDNSLocalPort , tcpDNSLocalPort int
110
111
if * inst .Config .HostResolver .Enabled {
111
- udpDNSLocalPort , err = findFreeUDPLocalPort ()
112
+ udpDNSLocalPort , err = freeport . UDP ()
112
113
if err != nil {
113
114
return nil , err
114
115
}
115
- tcpDNSLocalPort , err = findFreeTCPLocalPort ()
116
+ tcpDNSLocalPort , err = freeport . TCP ()
116
117
if err != nil {
117
118
return nil , err
118
119
}
@@ -123,7 +124,7 @@ func New(instName string, stdout io.Writer, signalCh chan os.Signal, opts ...Opt
123
124
if * inst .Config .VMType == limayaml .VZ {
124
125
vSockPort = 2222
125
126
} else if * inst .Config .VMType == limayaml .WSL2 {
126
- port , err := getFreeVSockPort ()
127
+ port , err := freeport . VSock ()
127
128
if err != nil {
128
129
logrus .WithError (err ).Error ("failed to get free VSock port" )
129
130
}
@@ -252,57 +253,13 @@ func determineSSHLocalPort(confLocalPort int, instName string) (int, error) {
252
253
// use hard-coded value for "default" instance, for backward compatibility
253
254
return 60022 , nil
254
255
}
255
- sshLocalPort , err := findFreeTCPLocalPort ()
256
+ sshLocalPort , err := freeport . TCP ()
256
257
if err != nil {
257
258
return 0 , fmt .Errorf ("failed to find a free port, try setting `ssh.localPort` manually: %w" , err )
258
259
}
259
260
return sshLocalPort , nil
260
261
}
261
262
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
-
306
263
func (a * HostAgent ) emitEvent (_ context.Context , ev events.Event ) {
307
264
a .eventEncMu .Lock ()
308
265
defer a .eventEncMu .Unlock ()
0 commit comments