myclient6.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
int main __P((int, char **));
int
main(argc, argv)
int argc;
char **argv;
{
struct addrinfo info, *res;
ssize_t l;
int s;
char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
char buf[1024];
char ip[256];
/* 引数の数をチェック */
if (argc != 3){
fprintf(stderr, "usage: %s host (port)\n",argv[0]);
exit(EXIT_FAILURE);
}
/*アドレスをバイナリに変更*/
memset(&info, 0, sizeof(info));
info.ai_flags = AI_CANONNAME;
info.ai_family = AF_UNSPEC;
info.ai_socktype = SOCK_STREAM;
if (getaddrinfo(argv[1],argv[2], &info, &res) != 0) {
perror("getaddrinfo");
exit(EXIT_FAILURE);
}
s = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
if (s < 0) {
perror("socket");
exit(EXIT_FAILURE);
}
getnameinfo(res->ai_addr, res->ai_addrlen, hbuf, sizeof(hbuf), sbuf,
sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV);
fprintf(stderr, "trying %s port %s\n", hbuf, argv[2]);
if (connect(s, res->ai_addr, res->ai_addrlen) < 0) {
perror("connect");
exit(EXIT_FAILURE);
}
while ((l = read(s, buf, sizeof(buf))) > 0)
write(STDOUT_FILENO, buf, l);
close(s);
return EXIT_SUCCESS;
}
|