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]
