# Common capabilities

This guide describes commonly used protocols that must be in a component's
sandbox services (for [components v1](/docs/glossary.md#components-v1)) or
capabilities (for [components v2](/docs/glossary.md#components-v2)).

> See examples of capability configuration for [components v1][v1_example] or
[components v2][v2_example].

## Networking

Typical protocols used for components that require networking are

* [`fuchsia.posix.socket.Provider`] for creating sockets (`socket`).
* [`fuchsia.net.NameLookup`] for resolving hostnames (`getaddrinfo`).
* [`fuchsia.device.NameProvider`] to get the device name (`uname`).

POSIX sockets are provided by [libc] and [fdio] through `socket` calls which
require the [`fuchsia.posix.socket.Provider`] capability.

Address resolution is similarly provided by [libc] through `getaddrinfo` which
requires the [`fuchsia.net.NameLookup`] capability.

[`fuchsia.posix.socket.Provider`]: https://fuchsia.dev/reference/fidl/fuchsia.posix.socket#Provider
[`fuchsia.net.NameLookup`]: https://fuchsia.dev/reference/fidl/fuchsia.net#NameLookup
[`fuchsia.device.NameProvider`]: https://fuchsia.dev/reference/fidl/fuchsia.device#NameProvider
[libc]: /docs/concepts/system/libc.md
[fdio]: /docs/concepts/system/life_of_an_open.md
[v1_example]: /docs/concepts/components/v1/component_manifests.md
[v2_example]: /docs/concepts/components/v2/capabilities/protocol.md#consuming_protocol_capabilities
