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);
Binary file src/parallel_execution/socket_test has changed