|
|
## Index
|
|
|
|
|
|
* [Python API](#python)
|
|
|
* [Socket Creation and Binding](#python-create)
|
|
|
* [Sending Side](#python-send)
|
|
|
* [Receiving Side](#python-recv)
|
|
|
* [C/C++](#cc++)
|
|
|
|
|
|
## Python
|
... | ... | @@ -9,12 +12,13 @@ |
|
|
For a minimal working server/client, please checkout the [README.md](https://git.nt.uni-saarland.de/LARN/PRRT/blob/master/README.md).
|
|
|
|
|
|
### Socket Creation and Binding
|
|
|
<a name="python-create"></a>
|
|
|
```python
|
|
|
import prrt
|
|
|
s = prrt.PrrtSocket(address=("0.0.0.0", 5000))
|
|
|
```
|
|
|
|
|
|
The previous code import the `prrt` module, creates a PRRT socket, and binds it to all interfaces on UDP port 5000.
|
|
|
The previous code imports the `prrt` module, creates a PRRT socket, and binds it to all interfaces on UDP port 5000.
|
|
|
|
|
|
You can optionally specify a `target_delay` (in seconds), which is used by PRRT to execute the hybrid error correction (HEC) and expire packets that take too long to reach the receiver. Depending on the `receive` calls you are using, data is delivered to the application ASAP or only when the `target_delay` has passed. The following socket uses a target delay of 50ms:
|
|
|
|
... | ... | @@ -23,7 +27,7 @@ s = prrt.PrrtSocket(address=("0.0.0.0", 5000), |
|
|
target_delay=0.05)
|
|
|
```
|
|
|
|
|
|
As the PRRT stack uses multiple threads to separate the transmission and reception of data as well as feedback pcakets, threads might be migrated between cores by the Linux kernel. This is avoided by the the following socket that uses threadpinning:
|
|
|
As the PRRT stack uses multiple threads to separate the transmission and reception of data as well as feedback packets, threads might be migrated between cores by the Linux kernel. This is avoided by the the following socket that uses threadpinning:
|
|
|
```python
|
|
|
s = prrt.PrrtSocket(address=("0.0.0.0", 5000),
|
|
|
thread_pinning=True)
|
... | ... | @@ -31,11 +35,14 @@ s = prrt.PrrtSocket(address=("0.0.0.0", 5000), |
|
|
|
|
|
|
|
|
### Sending Side
|
|
|
<a name="python-send"></a>
|
|
|
First, you have to specify the peer address using the `connect()` method:
|
|
|
|
|
|
```python
|
|
|
s = prrt.PrrtSocket(address=("0.0.0.0", 6000))
|
|
|
s.connect("127.0.0.1", 5000)
|
|
|
s.connect(("127.0.0.1", 5000))
|
|
|
```
|
|
|
|
|
|
In contrast to transport protocols such as TCP, this operation does not send out packets. Afterwards, data can be send to the socket using:
|
|
|
|
|
|
```python
|
... | ... | @@ -60,6 +67,7 @@ There are numerous channel parameters that PRRT measures passively and which can |
|
|
* `lossrate_fwd`: The estimated packet loss rate on the path from sender to the receiver. The receiver keeps a window of recently received packets, computes the number of losses as well as the length of gaps and burst, and communicates this information to the sender via feedback packets.
|
|
|
|
|
|
### Receiving Side
|
|
|
<a name="python-recv"></a>
|
|
|
The data can be received on the receiver by:
|
|
|
|
|
|
```python
|
... | ... | |