Skip to content

Commit b60fb63

Browse files
committed
Simplification of sending code
1 parent 66b59a1 commit b60fb63

File tree

1 file changed

+47
-39
lines changed

1 file changed

+47
-39
lines changed

GCD/GCDAsyncUdpSocket.m

Lines changed: 47 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3589,18 +3589,17 @@ - (void)doSend
35893589
return;
35903590
}
35913591

3592-
ssize_t result = 0;
3592+
NSData *addr = nil;
3593+
int af;
3594+
3595+
// 1. Check for problems
35933596

35943597
BOOL waitingForResolve = NO;
3595-
BOOL waitingForSocket = NO;
3596-
BOOL checkResult = NO;
35973598
BOOL done = NO;
35983599

35993600
if (flags & kDidConnect)
36003601
{
3601-
//
36023602
// Connected socket
3603-
//
36043603

36053604
if (currentSend->resolveInProgress || currentSend->addresses || currentSend->error)
36063605
{
@@ -3612,24 +3611,13 @@ - (void)doSend
36123611
}
36133612
else
36143613
{
3615-
const void *buffer = [currentSend->buffer bytes];
3616-
size_t length = (size_t)[currentSend->buffer length];
3617-
3618-
if (socket4FD != SOCKET_NULL)
3619-
result = send(socket4FD, buffer, length, 0);
3620-
else
3621-
result = send(socket6FD, buffer, length, 0);
3622-
3623-
LogVerbose(@"send(socket%@FD) = %i (connected)", (socket4FD != SOCKET_NULL ? @"4" : @"6"), (int)result);
3624-
3625-
checkResult = YES;
3614+
af = cachedConnectedFamily;
3615+
addr = cachedConnectedAddress;
36263616
}
36273617
}
36283618
else
36293619
{
3630-
//
36313620
// Non-Connected socket
3632-
//
36333621

36343622
if (currentSend->resolveInProgress)
36353623
{
@@ -3651,40 +3639,58 @@ - (void)doSend
36513639
}
36523640
else
36533641
{
3654-
NSData *addr = nil;
36553642
NSError *err = nil;
3656-
3657-
int af = [self getAddress:&addr error:&err fromAddresses:currentSend->addresses];
3643+
af = [self getAddress:&addr error:&err fromAddresses:currentSend->addresses];
36583644

36593645
if (err)
36603646
{
36613647
[self notifyDidNotSendDataWithTag:currentSend->tag dueToError:err];
36623648
done = YES;
36633649
}
3664-
else
3665-
{
3666-
const void *buffer = [currentSend->buffer bytes];
3667-
size_t length = (size_t)[currentSend->buffer length];
3668-
3669-
const void *dst = [addr bytes];
3670-
socklen_t dstSize = (socklen_t)[addr length];
3671-
3672-
if (af == AF_INET)
3673-
result = sendto(socket4FD, buffer, length, 0, dst, dstSize);
3674-
else
3675-
result = sendto(socket6FD, buffer, length, 0, dst, dstSize);
3676-
3677-
LogVerbose(@"send(socket%@FD) = %i (non-connected)", (af == AF_INET ? @"4" : @"6"), (int)result);
3678-
3679-
checkResult = YES;
3680-
}
36813650
}
36823651
}
36833652

3653+
// 2. Perform the send (if no problems)
3654+
36843655
NSError *error = nil;
3656+
BOOL waitingForSocket = NO;
36853657

3686-
if (checkResult)
3658+
if (!waitingForResolve && !done)
36873659
{
3660+
ssize_t result = 0;
3661+
3662+
if (flags & kDidConnect)
3663+
{
3664+
// Connected socket
3665+
3666+
const void *buffer = [currentSend->buffer bytes];
3667+
size_t length = (size_t)[currentSend->buffer length];
3668+
3669+
if (socket4FD != SOCKET_NULL)
3670+
result = send(socket4FD, buffer, length, 0);
3671+
else
3672+
result = send(socket6FD, buffer, length, 0);
3673+
3674+
LogVerbose(@"send(socket%@FD) = %i (connected)", (socket4FD != SOCKET_NULL ? @"4" : @"6"), (int)result);
3675+
}
3676+
else
3677+
{
3678+
// Non-Connected socket
3679+
3680+
const void *buffer = [currentSend->buffer bytes];
3681+
size_t length = (size_t)[currentSend->buffer length];
3682+
3683+
const void *dst = [addr bytes];
3684+
socklen_t dstSize = (socklen_t)[addr length];
3685+
3686+
if (af == AF_INET)
3687+
result = sendto(socket4FD, buffer, length, 0, dst, dstSize);
3688+
else
3689+
result = sendto(socket6FD, buffer, length, 0, dst, dstSize);
3690+
3691+
LogVerbose(@"send(socket%@FD) = %i (non-connected)", (af == AF_INET ? @"4" : @"6"), (int)result);
3692+
}
3693+
36883694
// If the socket wasn't bound before, it is now
36893695

36903696
if ((flags & kDidBind) == 0)
@@ -3717,6 +3723,8 @@ - (void)doSend
37173723
}
37183724
}
37193725

3726+
// 3. Process results of 1 & 2
3727+
37203728
if (waitingForResolve)
37213729
{
37223730
// We're waiting for the packet's destination to be resolved.

0 commit comments

Comments
 (0)