> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/holoscan/sdk-user-guide/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/holoscan/sdk-user-guide/_mcp/server.

# holoscan::FastDdsTransport

> DDS-based implementation of PubSubTransport.

DDS-based implementation of PubSubTransport.

Uses FastDDS DataWriter/DataReader for message transport.

```cpp showLineNumbers={false}
#include <holoscan/fastdds_transport.hpp>
```

**Inherits from:** `nvidia::gxf::PubSubTransport` (public)

---

## Constructors

### FastDdsTransport \[#fastddstransport]

#### From raw pointer

```cpp showLineNumbers={false}
holoscan::FastDdsTransport::FastDdsTransport(
    FastDdsPubSubContext *context
)
```

Construct a `FastDdsTransport` with a [FastDdsPubSubContext](fastddspubsubcontext).

**Parameters**

**`context`** `FastDdsPubSubContext *`

[FastDdsPubSubContext](fastddspubsubcontext) providing DomainParticipant

---

#### Copy (deleted)

```cpp showLineNumbers={false}
holoscan::FastDdsTransport::FastDdsTransport(
    const FastDdsTransport &
) = delete
```

### Destructor \[#destructor]

### \~FastDdsTransport

```cpp showLineNumbers={false}
holoscan::FastDdsTransport::~FastDdsTransport() override
```

Destructor - calls shutdown() if needed.

---

## Assignment operators

### operator= \[#operator\_assign]

```cpp showLineNumbers={false}
FastDdsTransport & holoscan::FastDdsTransport::operator=(
    const FastDdsTransport &
) = delete
```

---

## Methods

### initialize \[#initialize]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::initialize() override
```

### shutdown \[#shutdown]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::shutdown() override
```

### is\_initialized \[#isinitialized]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::is_initialized() const override
```

### transport\_model \[#transportmodel]

```cpp showLineNumbers={false}
nvidia::gxf::TransportModel holoscan::FastDdsTransport::transport_model() const override
```

DDS is a topic-based transport.

[PubSubContext](pubsubcontext) uses this to call send(topic\_name, ...) once per publish instead of calling send(gid, ...) once per subscriber.

### native\_topic\_matching \[#nativetopicmatching]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::native_topic_matching() const override
```

SEDP handles topic matching + QoS compatibility at the RTPS protocol level.

### native\_qos\_enforcement \[#nativeqosenforcement]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::native_qos_enforcement() const override
```

RTPS-level reliability, durability, and deadline enforcement.

### supports\_multicast \[#supportsmulticast]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::supports_multicast() const override
```

RTPS supports multicast for discovery and data.

### requires\_explicit\_connections \[#requiresexplicitconnections]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::requires_explicit_connections() const override
```

DDS DataWriters/DataReaders manage connections internally.

### supports\_native\_buffers \[#supportsnativebuffers]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::supports_native_buffers() const override
```

### supports\_mixed\_local\_remote\_fanout \[#supportsmixedlocalremotefanout]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::supports_mixed_local_remote_fanout() const override
```

### supports\_native\_profile \[#supportsnativeprofile]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::supports_native_profile(
    const std::string &profile
) const override
```

### send\_native\_descriptor \[#sendnativedescriptor]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send_native_descriptor(
    const std::string &topic_name,
    const nvidia::gxf::NativeDescriptorPayload &descriptor,
    const nvidia::gxf::MessageMetadata &metadata
) override
```

Send a native descriptor on the sidecar topic "\{topic}/\_native\_desc".

### set\_native\_buffers\_enabled \[#setnativebuffersenabled]

```cpp showLineNumbers={false}
void holoscan::FastDdsTransport::set_native_buffers_enabled(
    bool enabled
)
```

Enable native buffer support (called by [FastDdsPubSubNetworkContext](fastddspubsubnetworkcontext)).

### connect\_to \[#connectto]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::connect_to(
    const nvidia::gxf::EndpointInfo &remote_endpoint
) override
```

No-op for DDS - discovery is automatic via SPDP/SEDP.

### disconnect\_from \[#disconnectfrom]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::disconnect_from(
    const nvidia::gxf::Gid &remote_gid
) override
```

No-op for DDS - endpoint lifecycle managed by DDS.

### is\_connected\_to \[#isconnectedto]

```cpp showLineNumbers={false}
bool holoscan::FastDdsTransport::is_connected_to(
    const nvidia::gxf::Gid &remote_gid
) const override
```

Returns true for any endpoint (DDS handles discovery).

### create\_publisher\_endpoint \[#createpublisherendpoint]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_publisher_endpoint(
    const std::string &topic_name,
    const nvidia::gxf::Gid &publisher_gid,
    const nvidia::gxf::QoSProfile &qos = nvidia::gxf::QoSProfile{}
) override
```

Create a DataWriter for a topic.

Called automatically by PubSubContext::register\_publisher(). Maps the QoSProfile to FastDDS DataWriterQos via dds\_qos::apply\_writer\_qos().

**Returns:** Success or error if topic/writer creation fails.

**Parameters**

**`topic_name`** `const std::string &`

Name of the topic to publish to.

---

**`publisher_gid`** `const nvidia::gxf::Gid &`

GID to associate with this writer.

---

**`qos`** `const nvidia::gxf::QoSProfile &` — default: nvidia::gxf::QoSProfile\{}

QoS profile to apply to the DataWriter.

---

### create\_subscriber\_endpoint \[#createsubscriberendpoint]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_subscriber_endpoint(
    const std::string &topic_name,
    const nvidia::gxf::Gid &subscriber_gid,
    const nvidia::gxf::QoSProfile &qos = nvidia::gxf::QoSProfile{}
) override
```

Create a DataReader for a topic.

Called automatically by PubSubContext::register\_subscriber(). Maps the QoSProfile to FastDDS DataReaderQos via dds\_qos::apply\_reader\_qos().

**Returns:** Success or error if topic/reader creation fails.

**Parameters**

**`topic_name`** `const std::string &`

Name of the topic to subscribe to.

---

**`subscriber_gid`** `const nvidia::gxf::Gid &`

GID to associate with this reader.

---

**`qos`** `const nvidia::gxf::QoSProfile &` — default: nvidia::gxf::QoSProfile\{}

QoS profile to apply to the DataReader.

---

### remove\_publisher\_endpoint \[#removepublisherendpoint]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::remove_publisher_endpoint(
    const nvidia::gxf::Gid &publisher_gid
) override
```

Remove a DataWriter.

Called automatically by PubSubContext::unregister\_publisher() and PubSubContext::deinitialize(). For reliable QoS, calls wait\_for\_acknowledgments() before deletion.

**Returns:** Success or error if writer not found.

**Parameters**

**`publisher_gid`** `const nvidia::gxf::Gid &`

GID of the writer to remove.

---

### remove\_subscriber\_endpoint \[#removesubscriberendpoint]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::remove_subscriber_endpoint(
    const nvidia::gxf::Gid &subscriber_gid
) override
```

Remove a DataReader.

Called automatically by PubSubContext::unregister\_subscriber() and PubSubContext::deinitialize().

**Returns:** Success or error if reader not found.

**Parameters**

**`subscriber_gid`** `const nvidia::gxf::Gid &`

GID of the reader to remove.

---

### send \[#send]

#### Overload 1

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send(
    const nvidia::gxf::Gid &destination_gid,
    const std::vector<uint8_t> &payload,
    const nvidia::gxf::MessageMetadata &metadata
) override
```

Send payload via DDS DataWriter (GID-based fallback).

This is the GID-based send required by the PubSubTransport interface. For kTopicBased transports, [PubSubContext](pubsubcontext) calls the topic-based send() overload instead, so this is a fallback only.

**Returns:** Success or error if no writer exists for the publisher.

**Parameters**

**`destination_gid`** `const nvidia::gxf::Gid &`

IGNORED - DDS publishes to topic, not endpoint.

---

**`payload`** `const std::vector<uint8_t> &`

Serialized message (already staged to host memory).

---

**`metadata`** `const nvidia::gxf::MessageMetadata &`

Must contain publisher\_gid identifying the writer.

---

#### Overload 2

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send(
    const std::string &topic_name,
    const std::vector<uint8_t> &payload,
    const nvidia::gxf::MessageMetadata &metadata
) override
```

Send payload via DDS DataWriter (topic-based, preferred).

Looks up the DataWriter directly by topic name — no GID→topic mapping. This is the primary send path for DDS since transport\_model() returns kTopicBased.

**Returns:** Success or error if no writer exists for the topic.

**Parameters**

**`topic_name`** `const std::string &`

Topic to publish on.

---

**`payload`** `const std::vector<uint8_t> &`

Serialized message.

---

**`metadata`** `const nvidia::gxf::MessageMetadata &`

[Message](message) metadata (publisher\_gid for diagnostics).

---

### set\_on\_receive \[#setonreceive]

```cpp showLineNumbers={false}
void holoscan::FastDdsTransport::set_on_receive(
    ReceiveCallback callback
) override
```

### set\_on\_connection\_established \[#setonconnectionestablished]

```cpp showLineNumbers={false}
void holoscan::FastDdsTransport::set_on_connection_established(
    ConnectionEstablishedCallback callback
) override
```

### set\_on\_connection\_lost \[#setonconnectionlost]

```cpp showLineNumbers={false}
void holoscan::FastDdsTransport::set_on_connection_lost(
    ConnectionLostCallback callback
) override
```

### get\_send\_queue\_size \[#getsendqueuesize]

```cpp showLineNumbers={false}
size_t holoscan::FastDdsTransport::get_send_queue_size() const override
```

### get\_receive\_queue\_size \[#getreceivequeuesize]

```cpp showLineNumbers={false}
size_t holoscan::FastDdsTransport::get_receive_queue_size() const override
```

### get\_connection\_count \[#getconnectioncount]

```cpp showLineNumbers={false}
size_t holoscan::FastDdsTransport::get_connection_count() const override
```

### get\_or\_create\_topic \[#getorcreatetopic]

```cpp showLineNumbers={false}
eprosima::fastdds::dds::Topic * holoscan::FastDdsTransport::get_or_create_topic(
    const std::string &topic_name
)
```

Get or create a DDS Topic.

### get\_or\_create\_sidecar\_writer \[#getorcreatesidecarwriter]

```cpp showLineNumbers={false}
eprosima::fastdds::dds::DataWriter * holoscan::FastDdsTransport::get_or_create_sidecar_writer(
    const std::string &topic_name
)
```

Get or create a sidecar DataWriter for native descriptor messages.

### create\_sidecar\_reader \[#createsidecarreader]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::create_sidecar_reader(
    const std::string &topic_name,
    const nvidia::gxf::Gid &subscriber_gid
)
```

Create a sidecar DataReader for native descriptor messages.

### send\_impl \[#sendimpl]

```cpp showLineNumbers={false}
nvidia::gxf::Expected<void> holoscan::FastDdsTransport::send_impl(
    const std::string &topic_name,
    const std::vector<uint8_t> &payload,
    const nvidia::gxf::MessageMetadata &metadata
)
```

Shared send implementation used by both GID-based and topic-based send().

### enqueue\_sidecar\_receive \[#enqueuesidecarreceive]

```cpp showLineNumbers={false}
void holoscan::FastDdsTransport::enqueue_sidecar_receive(
    nvidia::gxf::Gid publisher_gid,
    std::vector<uint8_t> &&payload,
    nvidia::gxf::MessageMetadata metadata
)
```

---

## Member variables

| Name                               | Type                                                                 | Description |
| ---------------------------------- | -------------------------------------------------------------------- | ----------- |
| `context_`                         | `FastDdsPubSubContext *`                                             |             |
| `initialized_`                     | `bool`                                                               |             |
| `registered_type_name_`            | `std::string`                                                        |             |
| `type_registered_`                 | `bool`                                                               |             |
| `publisher_`                       | `eprosima::fastdds::dds::Publisher *`                                |             |
| `subscriber_`                      | `eprosima::fastdds::dds::Subscriber *`                               |             |
| `writers_`                         | `std::unordered_map< nvidia::gxf::Gid, WriterInfo >`                 |             |
| `readers_`                         | `std::unordered_map< nvidia::gxf::Gid, ReaderInfo >`                 |             |
| `topics_`                          | `std::unordered_map< std::string, eprosima::fastdds::dds::Topic * >` |             |
| `endpoints_mutex_`                 | `std::mutex`                                                         |             |
| `callback_mutex_`                  | `std::mutex`                                                         |             |
| `receive_callback_`                | `ReceiveCallback`                                                    |             |
| `connection_established_callback_` | `ConnectionEstablishedCallback`                                      |             |
| `connection_lost_callback_`        | `ConnectionLostCallback`                                             |             |
| `reader_listener_`                 | `std::unique_ptr< ReaderListener >`                                  |             |
| `writer_listener_`                 | `std::unique_ptr< WriterListener >`                                  |             |
| `type_support_`                    | `eprosima::fastdds::dds::TypeSupport`                                |             |
| `native_buffers_enabled_`          | `bool`                                                               |             |
| `sidecar_writers_`                 | `std::unordered_map< std::string, SidecarWriterInfo >`               |             |
| `sidecar_readers_`                 | `std::unordered_map< std::string, SidecarReaderInfo >`               |             |
| `sidecar_reader_listener_`         | `std::unique_ptr< SidecarReaderListener >`                           |             |
| `sidecar_dispatch_queue_`          | `std::unique_ptr< SidecarDispatchQueue >`                            |             |

---

## Inner classes

### WriterInfo

```cpp showLineNumbers={false}
struct holoscan::FastDdsTransport::WriterInfo
```

| Name         | Type                                   | Description |
| ------------ | -------------------------------------- | ----------- |
| `writer`     | `eprosima::fastdds::dds::DataWriter *` |             |
| `topic`      | `eprosima::fastdds::dds::Topic *`      |             |
| `topic_name` | `std::string`                          |             |

### ReaderInfo

```cpp showLineNumbers={false}
struct holoscan::FastDdsTransport::ReaderInfo
```

| Name             | Type                                   | Description |
| ---------------- | -------------------------------------- | ----------- |
| `reader`         | `eprosima::fastdds::dds::DataReader *` |             |
| `topic`          | `eprosima::fastdds::dds::Topic *`      |             |
| `topic_name`     | `std::string`                          |             |
| `subscriber_gid` | `nvidia::gxf::Gid`                     |             |

### SidecarWriterInfo

```cpp showLineNumbers={false}
struct holoscan::FastDdsTransport::SidecarWriterInfo
```

| Name     | Type                                   | Description |
| -------- | -------------------------------------- | ----------- |
| `writer` | `eprosima::fastdds::dds::DataWriter *` |             |
| `topic`  | `eprosima::fastdds::dds::Topic *`      |             |

### SidecarReaderInfo

```cpp showLineNumbers={false}
struct holoscan::FastDdsTransport::SidecarReaderInfo
```

| Name     | Type                                   | Description |
| -------- | -------------------------------------- | ----------- |
| `reader` | `eprosima::fastdds::dds::DataReader *` |             |
| `topic`  | `eprosima::fastdds::dds::Topic *`      |             |