@@ -2883,7 +2883,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError
28832883
28842884 // Create the socket(s) if needed
28852885
2886- if ((self->flags & kDidCreateSockets ) == 0 )
2886+ if ((self->flags & kDidCreateSockets ) == 0 )
28872887 {
28882888 if (![self createSocket4: useIPv4 socket6: useIPv6 error: &err])
28892889 {
@@ -2897,7 +2897,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError
28972897
28982898 if (useIPv4)
28992899 {
2900- int status = bind (self->socket4FD , (const struct sockaddr *)[interface4 bytes ], (socklen_t )[interface4 length ]);
2900+ int status = bind (self->socket4FD , (const struct sockaddr *)[interface4 bytes ], (socklen_t )[interface4 length ]);
29012901 if (status == -1 )
29022902 {
29032903 [self closeSockets ];
@@ -2911,7 +2911,7 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError
29112911
29122912 if (useIPv6)
29132913 {
2914- int status = bind (self->socket6FD , (const struct sockaddr *)[interface6 bytes ], (socklen_t )[interface6 length ]);
2914+ int status = bind (self->socket6FD , (const struct sockaddr *)[interface6 bytes ], (socklen_t )[interface6 length ]);
29152915 if (status == -1 )
29162916 {
29172917 [self closeSockets ];
@@ -2925,10 +2925,10 @@ - (BOOL)bindToPort:(uint16_t)port interface:(NSString *)interface error:(NSError
29252925
29262926 // Update flags
29272927
2928- self->flags |= kDidBind ;
2928+ self->flags |= kDidBind ;
29292929
2930- if (!useIPv4) self->flags |= kIPv4Deactivated ;
2931- if (!useIPv6) self->flags |= kIPv6Deactivated ;
2930+ if (!useIPv4) self->flags |= kIPv4Deactivated ;
2931+ if (!useIPv6) self->flags |= kIPv6Deactivated ;
29322932
29332933 result = YES ;
29342934
@@ -3003,7 +3003,7 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr
30033003
30043004 // Create the socket(s) if needed
30053005
3006- if ((self->flags & kDidCreateSockets ) == 0 )
3006+ if ((self->flags & kDidCreateSockets ) == 0 )
30073007 {
30083008 if (![self createSocket4: useIPv4 socket6: useIPv6 error: &err])
30093009 {
@@ -3013,30 +3013,28 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr
30133013
30143014 // Bind the socket(s)
30153015
3016- if (useIPv4)
3016+ if (useIPv4 || useIPv6 )
30173017 {
3018+ NSData *addressData = useIPv4 ? localAddr4 : localAddr6;
3019+ int socketFD = useIPv4 ? self->socket4FD : self->socket6FD ;
3020+ NSString *protocol = useIPv4 ? @" IPv4" : @" IPv6" ;
3021+
30183022 LogVerbose (@" Binding socket to address(%@ :%hu )" ,
3019- [[self class ] hostFromAddress: localAddr4 ],
3020- [[self class ] portFromAddress: localAddr4 ]);
3023+ [[self class ] hostFromAddress: addressData ],
3024+ [[self class ] portFromAddress: addressData ]);
30213025
3022- int status = bind (self-> socket4FD , ( const struct sockaddr *)[localAddr4 bytes ], ( socklen_t )[localAddr4 length ]) ;
3023- if (status == - 1 )
3026+ const struct sockaddr *addr = ( const struct sockaddr *)[addressData bytes ];
3027+ if (addr == NULL )
30243028 {
30253029 [self closeSockets ];
30263030
3027- NSString *reason = @" Error in bind() function " ;
3028- err = [self errnoErrorWithReason : reason];
3031+ NSString *reason = [ NSString stringWithFormat: @" Invalid address data for %@ bind " , protocol] ;
3032+ err = [self badParamError : reason];
30293033
30303034 return_from_block;
30313035 }
3032- }
3033- else
3034- {
3035- LogVerbose (@" Binding socket to address(%@ :%hu )" ,
3036- [[self class ] hostFromAddress: localAddr6],
3037- [[self class ] portFromAddress: localAddr6]);
30383036
3039- int status = bind (self-> socket6FD , ( const struct sockaddr *)[localAddr6 bytes ] , (socklen_t )[localAddr6 length ]);
3037+ int status = bind (socketFD, addr , (socklen_t )[addressData length ]);
30403038 if (status == -1 )
30413039 {
30423040 [self closeSockets ];
@@ -3050,10 +3048,10 @@ - (BOOL)bindToAddress:(NSData *)localAddr error:(NSError **)errPtr
30503048
30513049 // Update flags
30523050
3053- self->flags |= kDidBind ;
3051+ self->flags |= kDidBind ;
30543052
3055- if (!useIPv4) self->flags |= kIPv4Deactivated ;
3056- if (!useIPv6) self->flags |= kIPv6Deactivated ;
3053+ if (!useIPv4) self->flags |= kIPv4Deactivated ;
3054+ if (!useIPv6) self->flags |= kIPv6Deactivated ;
30573055
30583056 result = YES ;
30593057
@@ -3140,7 +3138,7 @@ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)e
31403138
31413139 // Create the socket(s) if needed
31423140
3143- if ((self->flags & kDidCreateSockets ) == 0 )
3141+ if ((self->flags & kDidCreateSockets ) == 0 )
31443142 {
31453143 if (![self createSockets: &err])
31463144 {
@@ -3173,9 +3171,9 @@ - (BOOL)connectToHost:(NSString *)host onPort:(uint16_t)port error:(NSError **)e
31733171
31743172 // Updates flags, add connect packet to send queue, and pump send queue
31753173
3176- self->flags |= kConnecting ;
3174+ self->flags |= kConnecting ;
31773175
3178- [self ->sendQueue addObject: packet];
3176+ [self ->sendQueue addObject: packet];
31793177 [self maybeDequeueSend ];
31803178
31813179 result = YES ;
@@ -3221,7 +3219,7 @@ - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr
32213219
32223220 // Create the socket(s) if needed
32233221
3224- if ((self->flags & kDidCreateSockets ) == 0 )
3222+ if ((self->flags & kDidCreateSockets ) == 0 )
32253223 {
32263224 if (![self createSockets: &err])
32273225 {
@@ -3240,9 +3238,9 @@ - (BOOL)connectToAddress:(NSData *)remoteAddr error:(NSError **)errPtr
32403238
32413239 // Updates flags, add connect packet to send queue, and pump send queue
32423240
3243- self->flags |= kConnecting ;
3241+ self->flags |= kConnecting ;
32443242
3245- [self ->sendQueue addObject: packet];
3243+ [self ->sendQueue addObject: packet];
32463244 [self maybeDequeueSend ];
32473245
32483246 result = YES ;
@@ -3473,7 +3471,7 @@ - (BOOL)performMulticastRequest:(int)requestType
34733471
34743472 // Perform join
34753473
3476- if ((self->socket4FD != SOCKET_NULL) && groupAddr4 && interfaceAddr4)
3474+ if ((self->socket4FD != SOCKET_NULL) && groupAddr4 && interfaceAddr4)
34773475 {
34783476 const struct sockaddr_in *nativeGroup = (const struct sockaddr_in *)[groupAddr4 bytes ];
34793477 const struct sockaddr_in *nativeIface = (const struct sockaddr_in *)[interfaceAddr4 bytes ];
@@ -3495,7 +3493,7 @@ - (BOOL)performMulticastRequest:(int)requestType
34953493
34963494 result = YES ;
34973495 }
3498- else if ((self->socket6FD != SOCKET_NULL) && groupAddr6 && interfaceAddr6)
3496+ else if ((self->socket6FD != SOCKET_NULL) && groupAddr6 && interfaceAddr6)
34993497 {
35003498 const struct sockaddr_in6 *nativeGroup = (const struct sockaddr_in6 *)[groupAddr6 bytes ];
35013499
@@ -3549,7 +3547,7 @@ - (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errP
35493547 return_from_block;
35503548 }
35513549
3552- if ((self->flags & kDidCreateSockets ) == 0 )
3550+ if ((self->flags & kDidCreateSockets ) == 0 )
35533551 {
35543552 if (![self createSockets: &err])
35553553 {
@@ -3582,7 +3580,7 @@ - (BOOL)sendIPv4MulticastOnInterface:(NSString*)interface error:(NSError **)errP
35823580 }
35833581 }
35843582
3585- }};
3583+ }};
35863584
35873585 if (dispatch_get_specific (IsOnSocketQueueOrTargetQueueKey))
35883586 block ();
@@ -3637,9 +3635,9 @@ - (BOOL)sendIPv6MulticastOnInterface:(NSString*)interface error:(NSError **)errP
36373635 return_from_block;
36383636 }
36393637 result = YES ;
3640- }
3638+ }
36413639
3642- }};
3640+ }};
36433641
36443642 if (dispatch_get_specific (IsOnSocketQueueOrTargetQueueKey))
36453643 block ();
@@ -3668,7 +3666,7 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
36683666 return_from_block;
36693667 }
36703668
3671- if ((self->flags & kDidCreateSockets ) == 0 )
3669+ if ((self->flags & kDidCreateSockets ) == 0 )
36723670 {
36733671 if (![self createSockets: &err])
36743672 {
@@ -3677,9 +3675,9 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
36773675 }
36783676
36793677 int value = flag ? 1 : 0 ;
3680- if (self->socket4FD != SOCKET_NULL)
3678+ if (self->socket4FD != SOCKET_NULL)
36813679 {
3682- int error = setsockopt (self->socket4FD , SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof (value));
3680+ int error = setsockopt (self->socket4FD , SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof (value));
36833681
36843682 if (error)
36853683 {
@@ -3690,9 +3688,9 @@ - (BOOL)enableReusePort:(BOOL)flag error:(NSError **)errPtr
36903688 result = YES ;
36913689 }
36923690
3693- if (self->socket6FD != SOCKET_NULL)
3691+ if (self->socket6FD != SOCKET_NULL)
36943692 {
3695- int error = setsockopt (self->socket6FD , SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof (value));
3693+ int error = setsockopt (self->socket6FD , SOL_SOCKET, SO_REUSEPORT, (const void *)&value, sizeof (value));
36963694
36973695 if (error)
36983696 {
@@ -3732,18 +3730,18 @@ - (BOOL)enableBroadcast:(BOOL)flag error:(NSError **)errPtr
37323730 return_from_block;
37333731 }
37343732
3735- if ((self->flags & kDidCreateSockets ) == 0 )
3733+ if ((self->flags & kDidCreateSockets ) == 0 )
37363734 {
37373735 if (![self createSockets: &err])
37383736 {
37393737 return_from_block;
37403738 }
37413739 }
37423740
3743- if (self->socket4FD != SOCKET_NULL)
3741+ if (self->socket4FD != SOCKET_NULL)
37443742 {
37453743 int value = flag ? 1 : 0 ;
3746- int error = setsockopt (self->socket4FD , SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof (value));
3744+ int error = setsockopt (self->socket4FD , SOL_SOCKET, SO_BROADCAST, (const void *)&value, sizeof (value));
37473745
37483746 if (error)
37493747 {
0 commit comments