aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-06-09 16:52:38 +0200
committerdec05eba <dec05eba@protonmail.com>2020-08-18 22:56:48 +0200
commit2b347b81b1b064b3450d4ac424923d0fb349c622 (patch)
treec757e5f90da1eaf67989cc3ca2431f4299a12a0f
parentb227a922a4f6e65a1b517b46f1eee66ec384e7e0 (diff)
Change connection type to tcp, perhaps udt requires that
-rw-r--r--include/sibs/DirectConnection.hpp2
-rw-r--r--src/DirectConnection.cpp24
2 files changed, 17 insertions, 9 deletions
diff --git a/include/sibs/DirectConnection.hpp b/include/sibs/DirectConnection.hpp
index b7c467e..134eade 100644
--- a/include/sibs/DirectConnection.hpp
+++ b/include/sibs/DirectConnection.hpp
@@ -53,7 +53,7 @@ namespace sibs
void connect(const Ipv4 &address, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc);
void send(const std::shared_ptr<DirectConnectionPeer> &peer, std::shared_ptr<std::vector<u8>> data, PubSubSendDataCallback sendDataCallbackFunc = nullptr);
protected:
- int createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr);
+ int createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr, bool bind = true);
private:
void connect(const Ipv4 &address, bool rendezvous, bool reuseAddr, PubSubConnectCallback connectCallbackFunc, PubSubReceiveDataCallback receiveDataCallbackFunc);
void receiveData();
diff --git a/src/DirectConnection.cpp b/src/DirectConnection.cpp
index 6872c27..ede5251 100644
--- a/src/DirectConnection.cpp
+++ b/src/DirectConnection.cpp
@@ -39,10 +39,10 @@ namespace sibs
UDT::cleanup();
}
- int DirectConnections::createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr)
+ int DirectConnections::createSocket(const Ipv4 &addressToBind, bool rendezvous, bool reuseAddr, bool bind)
{
Log::debug("UDT: Creating socket for ipv4 address %s, port: %d", addressToBind.getAddress().c_str(), addressToBind.getPort());
- UDTSOCKET socket = UDT::socket(AF_INET, SOCK_STREAM, IPPROTO_UDP);
+ UDTSOCKET socket = UDT::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(socket == UDT::INVALID_SOCK)
{
std::string errMsg = "UDT: Failed to create socket, error: ";
@@ -60,11 +60,14 @@ namespace sibs
UDT::setsockopt(socket, 0, UDT_MSS, &mss, sizeof(mss));
#endif
- if(UDT::bind(socket, (sockaddr*)&addressToBind.address, sizeof(addressToBind.address)) == UDT::ERROR)
+ if(bind)
{
- std::string errMsg = "UDT: Failed to bind, error: ";
- errMsg += UDT::getlasterror_desc();
- throw SocketCreateException(errMsg);
+ if(UDT::bind(socket, (sockaddr*)&addressToBind.address, sizeof(addressToBind.address)) == UDT::ERROR)
+ {
+ std::string errMsg = "UDT: Failed to bind, error: ";
+ errMsg += UDT::getlasterror_desc();
+ throw SocketCreateException(errMsg);
+ }
}
return socket;
@@ -88,7 +91,7 @@ namespace sibs
UDTSOCKET socket;
try
{
- socket = createSocket(Ipv4(nullptr, port), rendezvous, reuseAddr);
+ socket = createSocket(Ipv4(nullptr, port), rendezvous, reuseAddr, false);
}
catch(SocketCreateException &e)
{
@@ -158,16 +161,21 @@ namespace sibs
std::vector<char> data;
data.reserve(MAX_RECEIVED_DATA_SIZE);
+ Log::debug("DirectConnections::recieveData(): waiting for events");
std::set<UDTSOCKET> readfds;
while(alive)
{
- int numfsReady = UDT::epoll_wait(eid, &readfds, nullptr, 250);
+ int numfsReady = UDT::epoll_wait(eid, &readfds, nullptr, 1000);
if(numfsReady == 0)
+ {
continue;
+ }
else if(numfsReady == -1)
{
if(UDT::getlasterror_code() == UDT::ERRORINFO::ETIMEOUT)
+ {
continue;
+ }
else
{
Log::error("UDT: Stop receiving data, got error: %s", UDT::getlasterror_desc());