{"schema":"libjg2-1",
"vpath":"/git/",
"avatar":"/git/avatar/",
"alang":"",
"gen_ut":1745914077,
"reponame":"libwebsockets",
"desc":"libwebsockets lightweight C networking library",
"owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://libwebsockets.org/repo/libwebsockets",
"f":3,
"items": [
{"schema":"libjg2-1",
"cid":"5aaa0309943c1cea67e2cbc484b601aa",
"commit": {"type":"commit",
"time": 1482215827,
"time_ofs": 480,
"oid_tree": { "oid": "872e595960cfe950027adf03bab638ffebdb08c4", "alias": []},
"oid":{ "oid": "e0bed8da33566695c6f780559679e10372ce3bd6", "alias": []},
"msg": "ipv6-allow-binding-to-ipv6-address-in-iface",
"sig_commit": { "git_time": { "time": 1482215827, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },
"sig_author": { "git_time": { "time": 1481767100, "offset": 480 }, "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" }},
"body": "ipv6-allow-binding-to-ipv6-address-in-iface\n\nipv4 and ipv6 binding to a named interface works OK. ipv4 binding to an IP also\nworks, but we need some extra ipv6 magic to identify the ipv6 interface from an\nipv6 address.\n\nThis patch based on code from \u0022user3546716\u0022 at\nhttp://stackoverflow.com/questions/13504934/binding-sockets-to-ipv6-addresses\n\nadds the necessary magic.\n\nhttps://github.com/warmcat/libwebsockets/issues/717"
,
"diff": "diff --git a/lib/libwebsockets.c b/lib/libwebsockets.c\nindex f8c879a..36fb471 100755\n--- a/lib/libwebsockets.c\n+++ b/lib/libwebsockets.c\n@@ -30,6 +30,14 @@\n #include \u003csys/wait.h\u003e\n #endif\n \n+#ifdef LWS_USE_IPV6\n+#if defined(WIN32) || defined(_WIN32)\n+#include \u003cIphlpapi.h\u003e\n+#else\n+#include \u003cnet/if.h\u003e\n+#endif\n+#endif\n+\n int log_level \u003d LLL_ERR | LLL_WARN | LLL_NOTICE;\n static void (*lwsl_emit)(int level, const char *line) \u003d lwsl_emit_stderr;\n \n@@ -1517,6 +1525,39 @@ lws_socket_bind(struct lws_vhost *vhost, lws_sockfd_type sockfd, int port,\n \t\t\tlwsl_err(\u0022Unable to find interface %s\u005cn\u0022, iface);\n \t\t\treturn -1;\n \t\t}\n+\n+\t\tif (iface) {\n+\t\t\tstruct ifaddrs *addrs, *addr;\n+\t\t\tchar ip[NI_MAXHOST];\n+\t\t\tunsigned int i;\n+\n+\t\t\tgetifaddrs(\u0026addrs);\n+\t\t\tfor (addr \u003d addrs; addr; addr \u003d addr-\u003eifa_next) {\n+\t\t\t\tif (!addr-\u003eifa_addr ||\n+\t\t\t\t addr-\u003eifa_addr-\u003esa_family !\u003d AF_INET6)\n+\t\t\t\t\tcontinue;\n+\n+\t\t\t\tgetnameinfo(addr-\u003eifa_addr,\n+\t\t\t\t\t sizeof(struct sockaddr_in6),\n+\t\t\t\t\t ip, sizeof(ip),\n+\t\t\t\t\t NULL, 0, NI_NUMERICHOST);\n+\n+\t\t\t\ti \u003d 0;\n+\t\t\t\twhile (ip[i])\n+\t\t\t\t\tif (ip[i++] \u003d\u003d '%') {\n+\t\t\t\t\t\tip[i - 1] \u003d '\u005c0';\n+\t\t\t\t\t\tbreak;\n+\t\t\t\t\t}\n+\n+\t\t\t\tif (!strcmp(ip, iface)) {\n+\t\t\t\t\tserv_addr6.sin6_scope_id \u003d\n+\t\t\t\t\t\tif_nametoindex(addr-\u003eifa_name);\n+\t\t\t\t\tbreak;\n+\t\t\t\t}\n+\t\t\t}\n+\t\t\tfreeifaddrs(addrs);\n+\t\t}\n+\n \t\tserv_addr6.sin6_family \u003d AF_INET6;\n \t\tserv_addr6.sin6_port \u003d htons(port);\n \t} else\n","s":{"c":1745914077,"u": 3914}}
],"g": 5463,"chitpc": 0,"ehitpc": 0,"indexed":0
,
"ab": 0, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}