Mercurial > hg > Gears > Gears
changeset 995:74d7ff2c658a
socket test with getaddrinfo
author | ichikitakahiro <e165713@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 09 Dec 2021 02:54:43 +0900 |
parents | bb9cc6115890 |
children | c449bd74dc8b 705fad3712cd |
files | src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.h src/parallel_execution/examples/socket_test/ServerImpl.cbc src/parallel_execution/socket_test |
diffstat | 3 files changed, 29 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.h Sat Dec 04 13:48:32 2021 +0900 +++ b/src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.h Thu Dec 09 02:54:43 2021 +0900 @@ -1,4 +1,4 @@ typedef struct GearsDirectoryImpl <> impl GearsDirectory { - struct Tree* currentDirectory; + struct FTree* currentDirectory; struct Stack* directoryStack; } GearsDirectoryImpl; \ No newline at end of file
--- a/src/parallel_execution/examples/socket_test/ServerImpl.cbc Sat Dec 04 13:48:32 2021 +0900 +++ b/src/parallel_execution/examples/socket_test/ServerImpl.cbc Thu Dec 09 02:54:43 2021 +0900 @@ -9,6 +9,7 @@ #include <stdio.h> #include <string.h> #include <unistd.h> +#include <netdb.h> #define SERVER_ADDR "127.0.0.1" #define SERVER_PORT 8080 @@ -31,24 +32,41 @@ int* createSocket(){ int w_addr, c_sock; struct sockaddr_in a_addr; + char *hostname = "Localhost"; + char *service = "8080"; + struct addrinfo hints, *res0, *res; + int err; - struct in_addr { - u_int32_t s_addr; - }; + memset(&hints, 0, sizeof(hints)); + hints.ai_socktype = SOCK_STREAM; + hints.ai_family = PF_UNSPEC; //UNSPECはIPv4,6両方のうち使えるものを変えす + if((err = getaddrinfo(hostname, service, &hints, &res0)) != 0){ + printf("error %d\n" , err); + return 1; + } - w_addr = socket(AF_INET, SOCK_STREAM, 0); - if (w_addr == -1) { +for (res=res0; res!=NULL; res=res->ai_next){ + w_addr = socket(res->ai_family, res->ai_socktype, res->ai_protocol); //AF_INETは古い + break; +} + +if (w_addr == -1) { printf("socket error\n"); return -1; - } +} + +struct in_addr { + u_int32_t s_addr; +}; + memset(&a_addr, 0, sizeof(struct sockaddr_in)); - a_addr.sin_family = AF_INET; - a_addr.sin_port = htons((unsigned short)SERVER_PORT); - a_addr.sin_addr.s_addr = inet_addr(SERVER_ADDR); + a_addr.sin_family = PF_UNSPEC; + a_addr.sin_port = res->ai_addr; + a_addr.sin_addr.s_addr = res->ai_addrlen; - if (bind(w_addr, (const struct sockaddr *)&a_addr, sizeof(a_addr)) == -1) { + if (bind(w_addr, res->ai_addr, res->ai_addrlen) == -1) { printf("bind error\n"); close(w_addr); return -1; @@ -82,7 +100,6 @@ /**/ /* 文字列が"finish"ならクライアントとの接続終了 */ if (strcmp(recv_buf, "finish") == 0) { - /* 接続終了を表す0を送信 */ send_buf = 0; send_size = send(server->c_sock, &send_buf, 1, 0);