Improve and robustify local UDP port handling
This commit is contained in:
parent
c6c20c3e7c
commit
8664daeb9a
2 changed files with 21 additions and 13 deletions
|
@ -260,15 +260,6 @@ static inline void show_stackframe(){}
|
||||||
|
|
||||||
#define SIMUL_TRACKS 40
|
#define SIMUL_TRACKS 40
|
||||||
|
|
||||||
#ifndef UDP_API_HOST
|
|
||||||
#define UDP_API_HOST "localhost"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef UDP_API_PORT
|
|
||||||
#define UDP_API_PORT 4242
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
// The amount of milliseconds a simulated live stream is allowed to be "behind".
|
// The amount of milliseconds a simulated live stream is allowed to be "behind".
|
||||||
// Setting this value to lower than 2 seconds **WILL** cause stuttering in playback due to buffer negotiation.
|
// Setting this value to lower than 2 seconds **WILL** cause stuttering in playback due to buffer negotiation.
|
||||||
#define SIMULATED_LIVE_BUFFER 7000
|
#define SIMULATED_LIVE_BUFFER 7000
|
||||||
|
|
|
@ -452,10 +452,27 @@ int Controller::handleAPIConnection(Socket::Connection &conn){
|
||||||
|
|
||||||
void Controller::handleUDPAPI(void *np){
|
void Controller::handleUDPAPI(void *np){
|
||||||
Socket::UDPConnection uSock(true);
|
Socket::UDPConnection uSock(true);
|
||||||
uint16_t boundPort = uSock.bind(UDP_API_PORT, UDP_API_HOST);
|
uint16_t boundPort;
|
||||||
if (!boundPort){
|
{
|
||||||
FAIL_MSG("Could not open local API UDP socket - not all functionality will be available");
|
HTTP::URL udpApiAddr("udp://localhost:4242");
|
||||||
return;
|
if (getenv("UDP_API")){udpApiAddr = HTTP::URL(getenv("UDP_API"));}
|
||||||
|
boundPort = uSock.bind(udpApiAddr.getPort(), udpApiAddr.host);
|
||||||
|
if (!boundPort){
|
||||||
|
FAIL_MSG("Could not open local UDP API socket on %s:%" PRIu16 " - retrying with an ephemeral port", udpApiAddr.host.c_str(), udpApiAddr.getPort());
|
||||||
|
boundPort = uSock.bind(0, udpApiAddr.host);
|
||||||
|
if (!boundPort){
|
||||||
|
std::stringstream newHost;
|
||||||
|
char ranNums[3];
|
||||||
|
Util::getRandomBytes(ranNums, 3);
|
||||||
|
newHost << "127." << (int)ranNums[0] << "." << (int)ranNums[1] << "." << (int)ranNums[2];
|
||||||
|
FAIL_MSG("Could not open local ephemeral UDP API socket either - retrying with host %s", newHost.str().c_str());
|
||||||
|
boundPort = uSock.bind(0, newHost.str());
|
||||||
|
if (!boundPort){
|
||||||
|
FAIL_MSG("Could not open local UDP API socket even after all that... disabling local UDP API, some functionality may not be available");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
HTTP::URL boundAddr;
|
HTTP::URL boundAddr;
|
||||||
boundAddr.protocol = "udp";
|
boundAddr.protocol = "udp";
|
||||||
|
|
Loading…
Add table
Reference in a new issue