OSDN Git Service

Fix bugs of socket connection.
[ffftp/ffftp.git] / socketwrapper.c
index 79fbee4..caae589 100644 (file)
@@ -641,6 +641,8 @@ int FTPS_recv(SOCKET s, char * buf, int len, int flags)
 \r
 // IPv6対応\r
 \r
+const struct in6_addr IN6ADDR_NONE = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};\r
+\r
 typedef struct\r
 {\r
        HANDLE h;\r
@@ -682,7 +684,7 @@ DWORD WINAPI WSAAsyncGetHostByNameIPv6ThreadProc(LPVOID lpParameter)
                                                pHost->h_addr_list[0] = (char*)(&pHost->h_addr_list[2]);\r
                                                pHost->h_addr_list[1] = NULL;\r
                                                memcpy(pHost->h_addr_list[0], &((struct sockaddr_in*)p->ai_addr)->sin_addr, sizeof(struct in_addr));\r
-                                               PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + p->ai_addrlen));\r
+                                               PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + sizeof(struct in_addr)));\r
                                        }\r
                                        else\r
                                                PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(WSAENOBUFS << 16));\r
@@ -700,7 +702,7 @@ DWORD WINAPI WSAAsyncGetHostByNameIPv6ThreadProc(LPVOID lpParameter)
                                                pHost->h_addr_list[0] = (char*)(&pHost->h_addr_list[2]);\r
                                                pHost->h_addr_list[1] = NULL;\r
                                                memcpy(pHost->h_addr_list[0], &((struct sockaddr_in6*)p->ai_addr)->sin6_addr, sizeof(struct in6_addr));\r
-                                               PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + p->ai_addrlen));\r
+                                               PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(sizeof(struct hostent) + sizeof(char*) * 2 + sizeof(struct in6_addr)));\r
                                        }\r
                                        else\r
                                                PostMessage(pData->hWnd, pData->wMsg, (WPARAM)pData->h, (LPARAM)(WSAENOBUFS << 16));\r
@@ -768,7 +770,10 @@ int WSACancelAsyncRequestIPv6(HANDLE hAsyncTaskHandle)
        int Result;\r
        Result = SOCKET_ERROR;\r
        if(TerminateThread(hAsyncTaskHandle, 0))\r
+       {\r
+               CloseHandle(hAsyncTaskHandle);\r
                Result = 0;\r
+       }\r
        return Result;\r
 }\r
 \r
@@ -844,7 +849,7 @@ struct in6_addr inet6_addr(const char* cp)
        {\r
                if(!cp)\r
                {\r
-                       memset(&Result, 0xff, sizeof(Result));\r
+                       memcpy(&Result, &IN6ADDR_NONE, sizeof(struct in6_addr));\r
                        break;\r
                }\r
                if(i >= AfterZero)\r
@@ -868,7 +873,7 @@ struct in6_addr inet6_addr(const char* cp)
                                Result.u.Word[i] = ((Result.u.Word[i] & 0xff00) >> 8) | ((Result.u.Word[i] & 0x00ff) << 8);\r
                                if(strncmp(p, ":", 1) != 0 && strlen(p) > 0)\r
                                {\r
-                                       memset(&Result, 0xff, sizeof(Result));\r
+                                       memcpy(&Result, &IN6ADDR_NONE, sizeof(struct in6_addr));\r
                                        break;\r
                                }\r
                                if(cp = strstr(cp, ":"))\r