From 8ce21af2486b2da3273d554ffdf058cb07f49a8f Mon Sep 17 00:00:00 2001 From: dec05eba <0xdec05eba@gmail.com> Date: Sun, 14 Oct 2018 03:36:47 +0200 Subject: Another test --- src/DirectConnection.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/DirectConnection.cpp') 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 #include +#include #ifndef WIN32 #include @@ -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) -- cgit v1.2.3