aboutsummaryrefslogtreecommitdiff
path: root/src/DirectConnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/DirectConnection.cpp')
-rw-r--r--src/DirectConnection.cpp30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/DirectConnection.cpp b/src/DirectConnection.cpp
index 4a2c829..ec597de 100644
--- a/src/DirectConnection.cpp
+++ b/src/DirectConnection.cpp
@@ -2,6 +2,7 @@
#include "../include/Log.hpp"
#include <cstdio>
#include <cstring>
+#include <random>
#ifndef WIN32
#include <arpa/inet.h>
@@ -14,11 +15,20 @@
namespace sibs
{
+ static std::random_device rd;
+ static std::mt19937 gen(rd());
+
+ static u32 generateRandomNumber(u32 start, u32 end)
+ {
+ std::uniform_int_distribution<> dis(start, end);
+ return dis(gen);
+ }
+
// Max received data size allowed when receiving regular data, receive data as file to receive more data
const int MAX_RECEIVED_DATA_SIZE = 1024 * 1024 * 1; // 1Mb
DirectConnections::DirectConnections(u16 _port) :
- port(_port),
+ port(_port == 0 ? (u16)generateRandomNumber(2000, 32000) : _port),
alive(true)
{
UDT::startup();
@@ -80,7 +90,23 @@ namespace sibs
void DirectConnections::connect(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc)
{
- connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true);
+ Ipv4 myIp(nullptr, port);
+
+ UDTSOCKET client = UDT::socket(AF_INET, SOCK_STREAM, 0);
+ bool rendezvous = true;
+ UDT::setsockopt(client, 0, UDT_RENDEZVOUS, &rendezvous, sizeof(bool));
+
+ if (UDT::ERROR == UDT::bind(client, (sockaddr*)&myIp.address, sizeof(myIp.address))) {
+ printf("bind error: %s\n", UDT::getlasterror_desc());
+ exit(2);
+ }
+
+ if (UDT::ERROR == UDT::connect(client, (sockaddr*)&address.address, sizeof(address.address))) {
+ printf("connect error: %s\n", UDT::getlasterror_desc());
+ exit(3);
+ }
+ printf("connected to peer!\n");
+ //connect(address, true, true, connectCallbackFunc, receiveDataCallbackFunc, true);
}
void DirectConnections::connect(const Ipv4 &address, bool rendezvous, bool reuseAddr, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc, bool bind)