UNIX ソケットを使用して HTTP クライアントを作成しています (宿題の一環として)。私は現在、特定のIPアドレスに接続するためのこの作業コードを持っています:
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
char *server_address = "127.0.0.1";
struct sockaddr_in address;
if (sockfd < 0) {
printf("Unable to open socket\n");
exit(1);
}
// Try to connect to server_address on port PORT
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(server_address);
address.sin_port = htons(PORT);
if (connect(sockfd, (struct sockaddr*) &address, sizeof(address)) < 0) {
printf("Unable to connect to host\n");
exit(1);
}
server_address
ただし、 「google.com」など、IP ではないものになるように変更したいと考えています。を使用してこれを行う方法を理解しようとしてきましたがgethostbyname
、問題が発生しています。
gethostbyname は、IP アドレスまたは「google.com」のようなアドレスの両方を受け入れて、正しく機能しますか? (または、最初にアドレスで正規表現を実行してみて、それが IP アドレスの場合は何か他のことを行う必要があります)?
「google.com」などで動作させるために次のコードを試しましたが、警告が表示されますwarning: assignment makes integer from pointer without a cast
struct hostent *host_entity = gethostbyname(server_address);
address.sin_addr.s_addr = host_entity->h_addr_list[0];
私のやり方が間違っていることはわかっていますが、gethostbyname のドキュメントはひどいものです。