mirror of
https://github.com/storytold/UE4-OSC.git
synced 2026-10-17 00:25:12 +00:00
Merge pull request #46 from HughMacdonald/master
Catch error if socket fails to send data
This commit is contained in:
@@ -71,29 +71,41 @@ int32 UOscSettings::AddSendTarget(const FString & ip_port)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SendImpl(FSocket *socket, const uint8 *buffer, int32 length, const FInternetAddr & target)
|
static bool SendImpl(FSocket *socket, const uint8 *buffer, int32 length, const FInternetAddr & target)
|
||||||
{
|
{
|
||||||
int32 bytesSent = 0;
|
int32 bytesSent = 0;
|
||||||
while(length > 0)
|
while(length > 0)
|
||||||
{
|
{
|
||||||
socket->SendTo(buffer, length, bytesSent, target);
|
socket->SendTo(buffer, length, bytesSent, target);
|
||||||
|
if( bytesSent < 0 )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
length -= bytesSent;
|
length -= bytesSent;
|
||||||
buffer += bytesSent;
|
buffer += bytesSent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UOscSettings::Send(const uint8 *buffer, int32 length, int32 targetIndex)
|
void UOscSettings::Send(const uint8 *buffer, int32 length, int32 targetIndex)
|
||||||
{
|
{
|
||||||
if(targetIndex == -1)
|
if(targetIndex == -1)
|
||||||
{
|
{
|
||||||
|
bool error = false;
|
||||||
for(const auto & address : _sendAddresses)
|
for(const auto & address : _sendAddresses)
|
||||||
{
|
{
|
||||||
SendImpl(&_sendSocket.Get(), buffer, length, *address);
|
if(!SendImpl(&_sendSocket.Get(), buffer, length, *address))
|
||||||
|
{
|
||||||
|
const auto target = address->ToString(true);
|
||||||
|
UE_LOG(LogOSC, Error, TEXT("Cannot send OSC: %s : socket cannot send data"), *target);
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !NO_LOGGING
|
#if !NO_LOGGING
|
||||||
// Log sent packet
|
// Log sent packet
|
||||||
if(!LogOSC.IsSuppressed(ELogVerbosity::Verbose))
|
if(!error && !LogOSC.IsSuppressed(ELogVerbosity::Verbose))
|
||||||
{
|
{
|
||||||
TArray<uint8> tmp;
|
TArray<uint8> tmp;
|
||||||
tmp.Append(buffer, length);
|
tmp.Append(buffer, length);
|
||||||
@@ -104,11 +116,17 @@ void UOscSettings::Send(const uint8 *buffer, int32 length, int32 targetIndex)
|
|||||||
}
|
}
|
||||||
else if(targetIndex < _sendAddresses.Num())
|
else if(targetIndex < _sendAddresses.Num())
|
||||||
{
|
{
|
||||||
SendImpl(&_sendSocket.Get(), buffer, length, *_sendAddresses[targetIndex]);
|
bool error = false;
|
||||||
|
if(!SendImpl(&_sendSocket.Get(), buffer, length, *_sendAddresses[targetIndex]))
|
||||||
|
{
|
||||||
|
const auto target = _sendAddresses[targetIndex]->ToString(true);
|
||||||
|
UE_LOG(LogOSC, Error, TEXT("Cannot send OSC: %s : socket cannot send data"), *target);
|
||||||
|
error = true;
|
||||||
|
}
|
||||||
|
|
||||||
#if !NO_LOGGING
|
#if !NO_LOGGING
|
||||||
// Log sent packet
|
// Log sent packet
|
||||||
if(!LogOSC.IsSuppressed(ELogVerbosity::Verbose))
|
if(!error && !LogOSC.IsSuppressed(ELogVerbosity::Verbose))
|
||||||
{
|
{
|
||||||
TArray<uint8> tmp;
|
TArray<uint8> tmp;
|
||||||
tmp.Append(buffer, length);
|
tmp.Append(buffer, length);
|
||||||
|
|||||||
Reference in New Issue
Block a user