1 #ifndef __JBXL_NETWORK_H_
2 #define __JBXL_NETWORK_H_
14 #define _WINSOCK_DEPRECATED_NO_WARNINGS
23 extern WSADATA WsaData;
25 #define _WINSOCK_DEPRECATED_NO_WARNINGS
26 #pragma comment( lib, "ws2_32.lib" )
30 #include <sys/socket.h>
39 #ifdef HAVE_SYS_SOCKIO_H
40 #include <sys/sockio.h>
43 #ifdef HAVE_NETINET_IN_H
44 #include <netinet/in.h>
46 #ifdef HAVE_ARPA_INET_H
47 #include <arpa/inet.h>
53 #include <sys/ioctl.h>
74 int _udp_bind(
int sock,
int port,
int family);
82 #define udp_server_socket(p, a) _udp_server_socket((p), (a), AF_UNSPEC)
83 #define udp_server_socket_ipv4(p) _udp_server_socket((p), NULL, AF_INET)
84 #define udp_server_socket_ipv6(p, a) _udp_server_socket((p), (a), AF_INET6)
86 #define udp_server_socket_setopt(p, o, v, l, a) _udp_server_socket_setopt((p), (o), (v), (l), (a), AF_UNSPEC)
87 #define udp_server_socket_setopt_ipv4(p, o, v, l) _udp_server_socket_setopt((p), (o), (v), (l), NULL, AF_INET)
88 #define udp_server_socket_setopt_ipv6(p, o, v, l, a) _udp_server_socket_setopt((p), (o), (v), (l), (a), AF_INET6)
90 #define udp_client_socket(h, p, a) _udp_client_socket((h), (p), (a), AF_UNSPEC)
91 #define udp_client_socket_ipv4(h, p, a) _udp_client_socket((h), (p), (a), AF_INET)
92 #define udp_client_socket_ipv6(h, p, a) _udp_client_socket((h), (p), (a), AF_INET6)
94 #define udp_bind(s, p) _udp_bind((s), (p), AF_UNSPEC)
95 #define udp_bind_ipv4(s, p) _udp_bind((s), (p), AF_INET)
96 #define udp_bind_ipv6(s, p) _udp_bind((s), (p), AF_INET6)
98 #define udp_bind_setopt(s, p, o, v, l) _udp_bind_setopt((s), (p), (o), (v), (l), AF_UNSPEC)
99 #define udp_bind_setopt_ipv4(s, p, o, v, l) _udp_bind_setopt((s), (p), (o), (v), (l), AF_INET)
100 #define udp_bind_setopt_ipv6(s, p, o, v, l) _udp_bind_setopt((s), (p), (o), (v), (l), AF_INET6)
108 #define tcp_server_socket(p) _tcp_server_socket((p), AF_UNSPEC)
109 #define tcp_server_socket_ipv4(p) _tcp_server_socket((p), AF_INET)
110 #define tcp_server_socket_ipv6(p) _tcp_server_socket((p), AF_INET6)
112 #define tcp_server_socket_setop(p, o, v, l) _tcp_server_socket_setopt((p), (o), (v), (l), AF_UNSPEC)
113 #define tcp_server_socket_setop_ipv4(p, o, v, l) _tcp_server_socket_setopt((p), (o), (v), (l), AF_INET)
114 #define tcp_server_socket_setop_ipv6(p, o, v, l) _tcp_server_socket_setopt((p), (o), (v), (l), AF_INET6)
116 #define tcp_server_bind(p) _tcp_server_bind((p), AF_UNSPEC)
117 #define tcp_server_bind_ipv4(p) _tcp_server_bind((p), AF_INET)
118 #define tcp_server_bind_ipv6(p) _tcp_server_bind((p), AF_INET6)
120 #define tcp_server_bind_setopt(p, o, v, l) _tcp_server_bind_setopt((p), (o), (v), (l), AF_UNSPEC)
121 #define tcp_server_bind_setopt_ipv4(p, o, v, l) _tcp_server_bind_setopt((p), (o), (v), (l), AF_INET)
122 #define tcp_server_bind_setopt_ipv6(p, o, v, l) _tcp_server_bind_setopt((p), (o), (v), (l), AF_INET6)
126 int _tcp_bind(
int sock,
int port,
int family);
128 int _tcp_connect(
int sock,
char* host,
int port,
int family);
130 #define tcp_client_socket(h, p) _tcp_client_socket((h), (p), AF_UNSPEC)
131 #define tcp_client_socket_ipv4(h, p) _tcp_client_socket((h), (p), AF_INET)
132 #define tcp_client_socket_ipv6(h, p) _tcp_client_socket((h), (p), AF_INET6)
134 #define tcp_client_bind_socket(h, s, c) _tcp_client_bind_socket((h), (c), (s), AF_UNSPEC)
135 #define tcp_client_bind_socket_ipv4(h, s, c) _tcp_client_bind_socket((h), (c), (s), AF_INET)
136 #define tcp_client_bind_socket_ipv6(h, s, c) _tcp_client_bind_socket((h), (c), (s), AF_INET6)
138 #define tcp_bind(s, p) _tcp_bind((s), (p), AD_UNSPEC)
139 #define tcp_bind_ipv4(s, p) _tcp_bind((s), (p), AD_INET)
140 #define tcp_bind_ipv6(s, p) _tcp_bind((s), (p), AD_INET6)
142 #define tcp_bind_setopt(s, p, o, v, l) _tcp_bind_setopt((s), (p), (o), (v), (l), AF_UNSPEC)
143 #define tcp_bind_setopt_ipv4(s, p, o, v, l) _tcp_bind_setopt((s), (p), (o), (v), (l), AF_INET)
144 #define tcp_bind_setopt_ipv6(s, p, o, v, l) _tcp_bind_setopt((s), (p), (o), (v), (l), AF_INET6)
146 #define tcp_connect(s, h, p) _tcp_connect((s), (h), (p), AF_UNSPEC)
147 #define tcp_connect_ipv4(s, h, p) _tcp_connect((s), (h), (p), AF_INET)
148 #define tcp_connect_ipv6(s, h, p) _tcp_connect((s), (h), (p), AF_INET6)
151 int accept_intr(
int,
struct sockaddr*, socklen_t*);
168 int udp_recv(
int,
char*,
int,
struct addrinfo*);
169 int udp_send(
int,
char*,
int,
struct addrinfo*);
173 int udp_recv_wait(
int sock,
char* data,
int size,
struct addrinfo* sv_addr,
int tm);
183 #define udp_send_mesg(s, m, a) udp_send((s), (m), 0, (a))
184 #define tcp_send_mesg(s, m) tcp_send((s), (m), 0)
193 #define make_sockaddr_bynum_ipv4(a, p) make_sockaddr_bynum((a), (p), AF_INET)
194 #define make_sockaddr_bynum_ipv6(a, p) make_sockaddr_bynum((a), (p), AF_INET6)
198 #define get_hostname(h) _get_hostname((h), AF_UNSPEC)
199 #define get_hostname_ipv4(h) _get_hostname((h), AF_INET)
200 #define get_hostname_ipv6(h) _get_hostname((h), AF_INET6)
205 #define get_hostname_bynum_ipv4(n) get_hostname_bynum((n), AF_INET)
206 #define get_hostname_bynum_ipv6(n) get_hostname_bynum((n), AF_INET6)
211 #define get_ipaddr_byname_ipv4(h) get_ipaddr_byname((h), AF_INET)
212 #define get_ipaddr_byname_ipv6(h) get_ipaddr_byname((h), AF_INET6)
213 #define get_ipaddr_byname_num_ipv4(h) get_ipaddr_byname_num((h), AF_INET)
214 #define get_ipaddr_byname_num_ipv6(h) get_ipaddr_byname_num((h), AF_INET6)
219 #define get_myipaddr_ipv4() get_myipaddr(AF_INET)
220 #define get_myipaddr_ipv6() get_myipaddr(AF_INET6)
221 #define get_myipaddr_num_ipv4() get_myipaddr_num(AF_INET)
222 #define get_myipaddr_num_ipv6() get_myipaddr_num(AF_INET6)
226 #define get_localip_bydest(h) _get_localip_bydest((h), AF_UNSPEC)
227 #define get_localip_bydest_ipv4(h) _get_localip_bydest((h), AF_INET)
228 #define get_localip_bydest_ipv6(h) _get_localip_bydest((h), AF_INET6)
230 #define get_localip() _get_localip_bydest("www.google.co.jp", AF_UNSPEC)
231 #define get_localip_ipv4() _get_localip_bydest("www.google.co.jp", AF_INET)
232 #define get_localip_ipv6() _get_localip_bydest("www.google.co.jp", AF_INET6)
237 #define get_mynetaddr_num_ipv4() get_mynetaddr_num(AF_INET)
238 #define get_mynetaddr_num_ipv6() get_mynetaddr_num(AF_INET6)
239 #define get_mynetaddr_ipv4() get_mynetaddr(AF_INET)
240 #define get_mynetaddr_ipv6() get_mynetaddr(AF_INET6)
249 #define to_address_num8_ipv4(a, m) to_address_num((a), (m), 1, AF_INET)
250 #define to_address_num4_ipv4(a, m) to_address_num((a), (m), 0, AF_INET)
251 #define to_address_char8_ipv4(a) to_address_char((a), 1, AF_INET)
252 #define to_address_char4_ipv4(a) to_address_char((a), 0, AF_INET)
254 #define to_address_num32_ipv6(a, m) to_address_num((a), (m), 1, AF_INET6)
255 #define to_address_num16_ipv6(a, m) to_address_num((a), (m), 0, AF_INET6)
256 #define to_address_char32_ipv6(a) to_address_char((a), 1, AF_INET6)
257 #define to_address_char16_ipv6(a) to_address_char((a), 0, AF_INET6)
261 int is_same_network_num(
unsigned char* addr1,
unsigned char* addr2,
unsigned char* mask,
int family);
263 #define is_same_network_num_ipv4(a1, a2, m) is_same_network_num((a1), (a2), (m), AF_INET)
264 #define is_same_network_num_ipv6(a1, a2, m) is_same_network_num((a1), (a2), (m), AF_INET6)
278 #define udp_send_mesg_sockaddr_in(s, m, a) udp_send_sockaddr_in((s), (m), 0, (a))
280 struct sockaddr_in
get_sockaddr_in(char* hostname,
unsigned short cport);
285 #define is_same_sockaddr_in(a, b) is_same_sockaddr((struct sockaddr*)&(a), (struct sockaddr*)&(b))
char * get_hostname_bynum(unsigned char *bin, int family)
IPv4/IPv6 アドレス(バイナリ)→ ホスト名(文字列)
char * get_myipaddr(int family)
自分の [IPv4/IPv6 ネットワークアドレス]/[ネットマスク](文字列)
char * _get_localip_bydest(const char *host, int family)
自分の IPv4/IPv6 アドレス(文字列)
char * to_address_char(unsigned char *addr, int mask, int family)
[IPv4/IPv6 アドレス],[ネットマスク](数字8/32Byte)→ IPv4/IPv6 アドレス(文字列)
int get_valid_tcp_client_socket(int min, int max, char *hostname, unsigned short sport, unsigned short *cport)
int tcp_send(int, char *, int)
char * get_mynetaddr(int family)
自分の IPv4/IPv6 ネットワークアドレス(文字列)
struct sockaddr_in get_local_sockaddr_in(unsigned short cport)
char * get_ipaddr_ipv4(struct in_addr)
構造体 → IPv4 アドレス(文字列) use get_ipaddr_byname()
int send_wait(int sock, int tm)
int _udp_server_socket(int port, struct addrinfo **info, int family)
call socket(), bind()
int tcp_recv_mstream(int sock, char *mesg, int sz, mstream *sb, int tm)
int _udp_bind_setopt(int sock, int port, int opt, const void *, int len, int family)
call setsockopt(), bind()
int udp_send(int, char *, int, struct addrinfo *)
int is_same_network_num(unsigned char *addr1, unsigned char *addr2, unsigned char *mask, int family)
int tcp_send_mesgln(int, char *)
int socket_close(int sock)
call shutdown(), close()
int _udp_server_socket_setopt(int, int, const void *, int, struct addrinfo **, int f)
call socket(), setsockopt(), bind()
struct sockaddr * make_sockaddr_bystr(const char *addr, int port)
IPv4/IPv6 対応
int accept_intr(int, struct sockaddr *, socklen_t *)
call accept()
int _tcp_bind(int sock, int port, int family)
call bind()
unsigned char * get_mynetaddr_num(int family)
自分の IPv4/IPv6 ネットワークアドレス(バイナリ)
int get_valid_tcp_server_socket(int min, int max, unsigned short *port)
int _tcp_connect(int sock, char *host, int port, int family)
call connect()
int _udp_bind(int sock, int port, int family)
call bind()
void udp_hole_punching_sockaddr_in(int sock, struct sockaddr_in addr, int nm)
use udp_hole_punching()
int _tcp_server_socket_setopt(int port, int opt, const void *, int len, int famliy)
call socket(), setsockopt(), bind(), listen()
int set_nonblock_socket(int sock)
int _tcp_client_socket(char *hname, int port, int family)
call socket(), connect()
int _tcp_bind_setopt(int sock, int port, int opt, const void *, int len, int family)
call setsockopt(), bind()
unsigned char * get_ipaddr_byname_num(const char *h, int family)
ホスト名 → IPv4/IPv6 アドレス(バイナリ)
int _tcp_server_bind_setopt(int port, int opt, const void *, int len, int family)
call socket(), setsockopt(), bind()
int tcp_recv_wait(int sock, char *data, int sz, int tm)
char * get_ipaddr_byname(const char *host, int family)
ホスト名 → IPv4/IPv6 アドレス(文字列)
struct sockaddr * make_sockaddr_bynum(unsigned char *addr, int port, int family)
IPv4/IPv6 対応
char * get_hostname_bystr(const char *str)
IPv4/IPv6 アドレス(文字列) → ホスト名(文字列)
unsigned char * get_ipaddr_num_ipv4(struct in_addr)
構造体 → IPv4 アドレス(バイナリ) use get_ipaddr_byname_num()
struct sockaddr_in get_sockaddr_in(char *hostname, unsigned short cport)
int udp_recv_sockaddr_in(int, char *, int, struct sockaddr_in *)
use udp_recv()
int _tcp_client_bind_socket(char *host, int sport, int cport, int family)
call socket(), bind(), connect()
int udp_recv_wait(int sock, char *data, int size, struct addrinfo *sv_addr, int tm)
unsigned char * to_address_num(char *, int md, int mk, int family)
IPv4/IPv6 アドレス(文字列)→ [IPv4/IPv6 アドレス],[ネットマスク](数字8/32Byte)
int _udp_client_socket(char *host, int, struct addrinfo **, int family)
call socket()
int is_same_sockaddr(struct sockaddr *addr1, struct sockaddr *addr2)
int udp_recv_wait_sockaddr_in(int sock, char *data, int size, struct sockaddr_in *sv_addr, int tm)
use udp_recv_wait()
int udp_recv(int, char *, int, struct addrinfo *)
int _tcp_server_socket(int port, int family)
call socket(), bind(), listen()
int recv_wait(int sock, int tm)
struct sockaddr_in get_sockaddr_in_bynum(char *ipnum, unsigned short cport)
char * _get_hostname(const char *host, int family)
IPv4/IPv6 アドレス(文字列), FQDN → ホスト名(文字列)
int get_valid_udp_socket(int min, int max, unsigned short *port)
unsigned char * get_myipaddr_num(int family)
自分の [IPv4/IPv6 アドレス],[ネットマスク](バイナリ)
int is_same_network(char *addr1, char *addr2, char *mask)
int _tcp_server_bind(int port, int family)
call socket(), bind()
int recv_wait_twin(int sock1, int sock2, int tm)
int tcp_recv(int, char *, int)
int set_block_socket(int sock)
int udp_client_socket_sockaddr_in(char *, int, struct sockaddr_in *)
use udp_client_socket()
int udp_send_sockaddr_in(int, char *, int, struct sockaddr_in *)
use udp_send()
void udp_hole_punching(int sock, struct addrinfo *addr, int num)
void cleanup_network(void)