On Apr 13, 2015, at 3:44 PM, Josh Graessley <[email protected]> wrote:

>> On Apr 13, 2015, at 1:25 PM, Jens Alfke <[email protected]> wrote:
>> 
>>> On Apr 13, 2015, at 10:12 AM, Jeff Johnson 
>>> <[email protected]> wrote:
>>> 
>>> I want the host and port is to send a "Host" header. I might be able to get 
>>> away without it, but I'd prefer to adhere to standards.
>> 
>> I ended up having to implement this earlier today; here’s the code I came up 
>> with. “_inputStream” is an NSInputStream opened on a TCP socket. Disclaimer: 
>> I haven’t tested it much yet, and not at all with IPv6 addresses.
>> 
>> - (NSString*) remoteHost {
>>    // First recover the socket handle from the stream:
>>    NSData* handleData = CFBridgingRelease(CFReadStreamCopyProperty(
>>                                                  (__bridge 
>> CFReadStreamRef)_inputStream,
>>                                                  
>> kCFStreamPropertySocketNativeHandle));
>>    if (!handleData || handleData.length != sizeof(CFSocketNativeHandle))
>>        return nil;
>>    CFSocketNativeHandle socketHandle = *(const 
>> CFSocketNativeHandle*)handleData.bytes;
>>    // Get the remote/peer address in binary form:
>>    struct sockaddr_in addr;
>>    unsigned addrLen = sizeof(addr);
>>    if (getpeername(socketHandle, (struct sockaddr*)&addr,&addrLen) < 0)
>>        return nil;
>>    // Format it in readable (e.g. dotted-quad) form, with the port number:
>>    char nameBuf[INET6_ADDRSTRLEN];
>>    if (inet_ntop(addr.sin_family, &addr.sin_addr, nameBuf, 
>> (socklen_t)sizeof(nameBuf)) == NULL)
>>        return nil;
>>    return [NSString stringWithFormat: @"%s:%hu", nameBuf, 
>> ntohs(addr.sin_port)];
>> }
> 
> This seems sub-optimal as there can be many hostnames that resolve to a 
> single address. A reverse-lookup of the address will yield one of those 
> hostnames, but it might not be the one you’re looking for.
> 
> Also, what does this do if you connect through a proxy? The native handle 
> could be a socket to a SOCKS (or other) proxy, right?
> 
> A radar requesting a better way to do this might be a good idea. If you file 
> one, please forward me the radar #, thanks.
> 
> -josh

Josh, do you have any insight into my original issue?


 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/macnetworkprog/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to