MCPcopy
hub / github.com/google/gvisor / New

Function New

pkg/sentry/socket/netstack/netstack.go:463–492  ·  view source on GitHub ↗

New creates a new endpoint socket.

(t *kernel.Task, family int, skType linux.SockType, protocol int, queue *waiter.Queue, endpoint tcpip.Endpoint)

Source from the content-addressed store, hash-verified

461
462// New creates a new endpoint socket.
463func New(t *kernel.Task, family int, skType linux.SockType, protocol int, queue *waiter.Queue, endpoint tcpip.Endpoint) (*vfs.FileDescription, *syserr.Error) {
464 if skType == linux.SOCK_STREAM {
465 endpoint.SocketOptions().SetDelayOption(true)
466 }
467
468 mnt := t.Kernel().SocketMount()
469 d := sockfs.NewDentry(t, mnt)
470 defer d.DecRef(t)
471
472 namespace := t.NetworkNamespace()
473 s := &sock{
474 Queue: queue,
475 family: family,
476 Endpoint: endpoint,
477 skType: skType,
478 protocol: protocol,
479 namespace: namespace,
480 }
481 s.LockFD.Init(&vfs.FileLocks{})
482 vfsfd := &s.vfsfd
483 if err := vfsfd.Init(s, linux.O_RDWR, t.Credentials(), mnt, d, &vfs.FileDescriptionOptions{
484 DenyPRead: true,
485 DenyPWrite: true,
486 UseDentryMetadata: true,
487 }); err != nil {
488 return nil, syserr.FromError(err)
489 }
490 namespace.IncRef()
491 return vfsfd, nil
492}
493
494// Release implements vfs.FileDescriptionImpl.Release.
495func (s *sock) Release(ctx context.Context) {

Callers 3

SocketMethod · 0.70
packetSocketFunction · 0.70
AcceptMethod · 0.70

Calls 11

DecRefMethod · 0.95
NewDentryFunction · 0.92
FromErrorFunction · 0.92
SetDelayOptionMethod · 0.80
SocketMountMethod · 0.80
KernelMethod · 0.80
SocketOptionsMethod · 0.65
InitMethod · 0.65
CredentialsMethod · 0.65
IncRefMethod · 0.65
NetworkNamespaceMethod · 0.45

Tested by

no test coverage detected