Skip to content

Instantly share code, notes, and snippets.

@hach-que
Created February 13, 2018 03:51
Show Gist options
  • Save hach-que/3f6aff39249dd78d39aabb9131fb1e89 to your computer and use it in GitHub Desktop.
Save hach-que/3f6aff39249dd78d39aabb9131fb1e89 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include "libzt.h"
#include <inttypes.h>
#include <thread>
#if defined(_WIN32)
#include <WinSock2.h>
#include <WS2tcpip.h>
#include <Ws2def.h>
#include <stdint.h>
#include <windows.h>
#endif
int main()
{
uint64_t nwid = 0xa09acf0233eabcde;
zts_startjoin("place", nwid);
int result, socket_fd4, socket_fd6, err;
socket_fd4 = zts_socket(AF_INET, SOCK_DGRAM, 0);
sockaddr_in servicezt4;
servicezt4.sin_family = AF_INET;
servicezt4.sin_addr.s_addr = INADDR_ANY;
servicezt4.sin_port = htons(9595);
err = zts_bind(socket_fd4, (struct sockaddr*)&servicezt4, sizeof(sockaddr_in));
err = zts_listen(socket_fd4, 1);
socket_fd6 = zts_socket(AF_INET6, SOCK_DGRAM, 0);
sockaddr_in6 servicezt6;
servicezt6.sin6_family = AF_INET6;
servicezt6.sin6_addr = IN6ADDR_ANY_INIT;
servicezt6.sin6_port = htons(9595);
err = zts_bind(socket_fd6, (struct sockaddr*)&servicezt6, sizeof(sockaddr_in6));
err = zts_listen(socket_fd6, 1);
auto t = std::thread([socket_fd6]()
{
fd_set readset;
int result;
while (true)
{
FD_ZERO(&readset);
FD_SET(socket_fd6, &readset);
struct timeval timeout;
timeout.tv_sec = 0;
timeout.tv_usec = 100;
result = zts_select(socket_fd6 + 1, &readset, NULL, NULL, &timeout);
DEBUG_INFO("result=%d", result);
if (result > 0)
{
char buffer[2048];
struct sockaddr_storage src_addr;
socklen_t src_addr_len = sizeof(src_addr);
ssize_t count = zts_recvfrom(socket_fd6, buffer, sizeof(buffer), 0, (struct sockaddr*)&src_addr, &src_addr_len);
DEBUG_INFO("buf=%s", &buf);
}
}
});
t.join();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment