{"id":203,"date":"2019-04-22T00:25:30","date_gmt":"2019-04-21T15:25:30","guid":{"rendered":"https:\/\/www.oji-koji.com\/?p=203"},"modified":"2019-05-12T19:28:59","modified_gmt":"2019-05-12T10:28:59","slug":"%e5%88%9d%e3%82%81%e3%81%a6%e3%81%ae%e3%82%bd%e3%82%b1%e3%83%83%e3%83%88api%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9f%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0-sockdb-linux-%e7%89%88%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.oji-koji.com\/?p=203","title":{"rendered":"\u521d\u3081\u3066\u306e\u30bd\u30b1\u30c3\u30c8API\u3092\u4f7f\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0 (SockDB Linux \u7248\uff09(2019\/05\/12\u66f4\u65b0)"},"content":{"rendered":"\n<p class=\"program_discription\">SockDB Linux \u7248\n  \u6b21\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u5b9f\u73fe\u3057\u307e\u3059\n    1.\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u3092\u8868\u793a\u3059\u308b\n    2.\u8d77\u52d5\u5f15\u6570\u304c\u306a\u3044\u3068\u304d\uff1a\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308bIP\u30a2\u30c9\u30ec\u30b9\u3092\u8868\u793a\u3059\u308b\n    3.\u8d77\u52d5\u5f15\u6570\u306b\u30c9\u30e1\u30a4\u30f3\u540d\uff08FQDN\uff09\u3092\u6307\u5b9a\u3057\u305f\u3068\u304d\uff1a\u30c9\u30e1\u30a4\u30f3\u540d\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308b\n      IP\u30a2\u30c9\u30ec\u30b9\u3092\u8868\u793a\u3059\u308b<\/p>\n\n\n\n<p class=\"program_discription\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\n  \u30d5\u30a1\u30a4\u30eb\u2192\u65b0\u898f\u4f5c\u6210\u2192\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u2192\u30e1\u30a4\u30af\u30d5\u30a1\u30a4\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\n    \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1aSockDB\n    \u300c\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">  (*)\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306f\u3001<a href=\"https:\/\/www.oji-koji.com\/?p=108\">VisualC++ for Linux\u3092\u4f7f\u3063\u305f\u30d7\u30ed\u30b0\u30e9\u30e0<\/a>\n  \u3092\u898b\u3066\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"program_discription\">    \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u65e2\u5b58\u306e\u9805\u76ee\u306e\u8ffd\u52a0\u3092\u9078\u3073<a href=\"https:\/\/www.oji-koji.com\/pro-files\/CommonLinux.zip\">stdThread.cpp, stdThread.h<\/a>, \n    makefile\u3092\u8ffd\u52a0\u3057\u307e\u3059\n    \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u65b0\u898f\u306e\u9805\u76ee\u306e\u8ffd\u52a0\u3092\u9078\u3073SockDB.cpp\u3092\u8ffd\u52a0\u3057\u307e\u3059<\/p>\n\n\n\n<p class=\"source_code\">\u3010makefile\u3011\nCC=g++ -g3 -O0\n#CC=g++\nPROGRAM=SockDB\nOBJS=SockDB.o stdThread.o\n\nSRCS=$(OBJS:%.o=%.cpp)\nINCLUDE=stdThread.h\nLFLAGS=-lpthread\n\n$(PROGRAM):$(OBJS) $(SRCS) $(INCLUDE)\n\t$(CC) -o $(PROGRAM) $(SRCS) $(LFLAGS)\n<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"source_code\">\u3010SockDB.cpp\u3011\n#include    &#8220;stdThread.h&#8221;\n\/\/ \u4f5c\u6210\u3057\u305f\u95a2\u6570\u306e\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u5ba3\u8a00\nvoid GetHostName();\nvoid GetHostAddress(LPSTR pszCurHost);\n\n\nint main(int argc, char *argv[])\n{\n    int      iRet = -1;\n    LPSTR    pszCurHost = NULL;\n    \/\/ \u8d77\u52d5\u5f15\u6570\u306e\u30c1\u30a7\u30c3\u30af\n    if (argc == 2)\n        pszCurHost = argv[1];    \/\/ \u30c9\u30e1\u30a4\u30f3\u540d\u304c\u6307\u5b9a\u3055\u308c\u305f\n\n    GetHostName();               \/\/ \u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u306e\u53d6\u5f97\n    GetHostAddress(pszCurHost);  \/\/ \u30a2\u30c9\u30ec\u30b9\u306e\u53d6\u5f97\n\n    iRet = 0;\n    return(iRet);\n}\n\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u306e\u53d6\u5f97\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nvoid GetHostName()\n{\n    char    szHostName[NI_MAXHOST];        \/\/ \u30db\u30b9\u30c8\u540d\u683c\u7d0d\u30a8\u30ea\u30a2\n    char    szMsg[NI_MAXHOST];\n\n    \/\/ \u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u306e\u53d6\u5f97\n    if (gethostname(szHostName, sizeof(szHostName)) == SOCKET_ERROR)\n        sprintf(szMsg, &#8220;Err: %d&#8221;, errno);\n    else\n        sprintf(szMsg, &#8220;%s&#8221;, szHostName);\n    fprintf(stderr, &#8220;%s\\n&#8221;, szMsg);\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30db\u30b9\u30c8\u540d\u304b\u3089IP\u30a2\u30c9\u30ec\u30b9\u3092\u53d6\u5f97\u3059\u308b\n\/\/    \u30db\u30b9\u30c8\u540d\u304cNULL\u306e\u3068\u304d\u306f\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u3092\u4f7f\u7528\u3059\u308b\n\/\/ parameter\n\/\/    LPSTR        pszCurHost    [in]\u30db\u30b9\u30c8\u540d\/NULL\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nvoid GetHostAddress(LPSTR pszCurHost)\n{\n    char        szHostName[NI_MAXHOST];  \/\/ \u30db\u30b9\u30c8\u540d\u683c\u7d0d\u30a8\u30ea\u30a2\n    addrinfo    hints, *pres = NULL, *pTemp = NULL;\n    char        szHostAddr[NI_MAXHOST];  \/\/ \u30a2\u30c9\u30ec\u30b9\u683c\u7d0d\u30a8\u30ea\u30a2\n    int         iCount = 1;\n\n    \/\/ \u30db\u30b9\u30c8\u540d\u3092szHostName\u306b\u683c\u7d0d\n    if (pszCurHost != NULL)\n    {\n        strcpy(szHostName, pszCurHost);\n    }\n    else\n    {\n        if (gethostname(szHostName, sizeof(szHostName)) == SOCKET_ERROR)\n            goto L_END;\n    }\n    \/\/ hints\u306e\u521d\u671f\u5316\n    memset(&amp;hints, 0, sizeof(hints));\n    hints.ai_family = AF_UNSPEC;     \/\/ IPv4, IPv6\u3068\u3082\u306b\u5217\u6319\u5bfe\u8c61\u3068\u3059\u308b\n\u3000\u3000\/\/ hint\u306b\u5f93\u3063\u3066\u30a2\u30c9\u30ec\u30b9\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b\n    if (getaddrinfo(szHostName, NULL, &amp;hints, &amp;pres) != 0)\n        goto L_END;\n\n    \/\/ \u9806\u756a\u306bpres\u306e\u4e2d\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u60c5\u5831\u3092\u8868\u793a\u3059\u308b\n    pTemp = pres;\n    while (pTemp != NULL)\n    {\n        \/\/ NI_NUMERICHOST \u6570\u5024\u5f62\u5f0f\u306e\u30db\u30b9\u30c8\u540d(IP\u30a2\u30c9\u30ec\u30b9)\n        if (getnameinfo(pTemp-&gt;ai_addr, (socklen_t)pTemp-&gt;ai_addrlen, szHostAddr, sizeof(szHostAddr), NULL, 0, NI_NUMERICHOST) == 0)\n        {\n            fprintf(stderr, &#8220;%d family:%2d Address:%s\\n&#8221;, iCount, pTemp-&gt;ai_family, szHostAddr);\n        }\n        pTemp = pTemp-&gt;ai_next;    \/\/ \u6b21\u306e\u60c5\u5831\u3078\u79fb\u52d5\n        iCount++;\n    }\n    freeaddrinfo(pres);            \/\/ \u53d6\u5f97\u3057\u305f\u60c5\u5831\u3092\u7834\u68c4\nL_END:\n    return;\n}\n<\/p>\n\n\n\n<p class=\"program_discription\">\nhints\u306e\u521d\u671f\u5316\u3067\nhints.ai_family = AF_UNSPEC;\n\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001\u5bfe\u8c61\u304c\u3059\u3079\u3066\u306e\u30d5\u30a1\u30df\u30ea\u3064\u307e\u308aIPv4, IPv6\u306b\u306a\u308a\u307e\u3059\u3002\nAF_INET\u3092\u6307\u5b9a\u3059\u308b\u3068IPv4, AF_INET6\u3092\u6307\u5b9a\u3059\u308b\u3068IPV6\u306e\u307f\u304c\u5bfe\u8c61\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">if(getaddrinfo(szHostName, NULL, &amp;hints, &amp;pres) != 0)\n\u3068\u3001\u30db\u30b9\u30c8\u540d\u306e\u307f\u3092\u6307\u5b9a\u3059\u308b\u3068\u6307\u5b9a\u3057\u305f\u30db\u30b9\u30c8\u306e\u30a2\u30c9\u30ec\u30b9\u60c5\u5831\u304c\n\u30d2\u30f3\u30c8\u306b\u6307\u5b9a\u3057\u305f\u6761\u4ef6\u3067pres\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">if (getnameinfo(pTemp-&gt;ai_addr, (socklen_t)pTemp-&gt;ai_addrlen, \n    szHostAddr, sizeof(szHostAddr), NULL, 0, NI_NUMERICHOST) == 0)\n\u3068NI_NUMERICHOST\u3092\u6307\u5b9a\u3059\u308b\u3068pTemp-&gt;ai_addr\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\nIP\u30a2\u30c9\u30ec\u30b9(\u30d0\u30a4\u30ca\u30ea)\u304c\u6570\u5024\u5f62\u5f0f\u3067szHostAddr\u306b\u683c\u7d0d\u3055\u308c\u307e\u3059\u3002\npTemp-&gt;ai_addr\u306fIPv4\u306e\u3068\u304dsockaddr_in\u3067\u3001IPv6\u306e\u3068\u304dsockaddr_in6\u306b\n\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u5f15\u6570\u306bwww.oji-koji.com\u3092\u6307\u5b9a\u3057\u3066\u52d5\u304b\u3059\u3068IPv4\u3068IPv6\u3092DNS\n\u30b5\u30fc\u30d0\u306b\u767b\u9332\u3057\u3066\u3042\u308a\u307e\u3059\u306e\u3067\u3001\u3061\u3083\u3093\u3068\u53d6\u5f97\u3067\u304d\u3066\u3044\u307e\u3059 <\/p>\n\n\n\n<p class=\"source_code\">$ .\/SockDB www.oji-koji.com\ntk2-235-27468.vs.sakura.ne.jp\n1 family:10 Address:2001:e42:102:1535:160:16:119:222\n2 family:10 Address:2001:e42:102:1535:160:16:119:222\n3 family:10 Address:2001:e42:102:1535:160:16:119:222\n4 family: 2 Address:160.16.119.222\n5 family: 2 Address:160.16.119.222\n6 family: 2 Address:160.16.119.222<\/p>\n\n\n\n<p class=\"program_discription\">\u3010\u53c2\u8003\u3011<br><a href=\"https:\/\/www.oji-koji.com\/pro-files\/SockDBLinux.zip\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8SockDB for Linux(zip)<\/a><br>\u5f15\u6570\u306b\u30c9\u30e1\u30a4\u30f3\u540d\u3001\u30b5\u30fc\u30d3\u30b9\u540d\u3092\u6307\u5b9a\u3059\u308b\u3068<br>IP\u30a2\u30c9\u30ec\u30b9\u3068\u30dd\u30fc\u30c8\u756a\u53f7\u3092\u8868\u793a\u3059\u308b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SockDB Linux \u7248 \u6b21\u306e\u3088\u3046\u306a\u6a5f\u80fd\u3092\u5b9f\u73fe\u3057\u307e\u3059 1.\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u3092\u8868\u793a\u3059\u308b 2.\u8d77\u52d5\u5f15\u6570\u304c\u306a\u3044\u3068\u304d\uff1a\u30ed\u30fc\u30ab\u30eb\u30db\u30b9\u30c8\u540d\u306b\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u308bIP\u30a2\u30c9\u30ec\u30b9\u3092\u8868\u793a\u3059\u308b 3.\u8d77\u52d5\u5f15\u6570\u306b\u30c9\u30e1\u30a4\u30f3\u540d\uff08FQDN\uff09\u3092\u6307\u5b9a\u3057\u305f\u3068\u304d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":129,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"","_original_post":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-203","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networkprograming","ja"],"_links":{"self":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/203","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=203"}],"version-history":[{"count":48,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/203\/revisions"}],"predecessor-version":[{"id":4590,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/203\/revisions\/4590"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/media\/129"}],"wp:attachment":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=203"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=203"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=203"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}