@@ -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
0 commit comments