JunkBox_Lib  1.10.2
network4.h
Go to the documentation of this file.
1 #ifndef __JBXL_NETWORK_H_
2 #define __JBXL_NETWORK_H_
3 
14 #include "tools.h"
15 
16 #define _WINSOCK_DEPRECATED_NO_WARNINGS
17 #ifdef WIN32
18  //#include <winsock2.h> see tools.h
19  #include <fcntl.h>
20 
21  #ifndef socklen_t
22  #define socklen_t int
23  #endif
24  extern WSADATA WsaData;
25 
26  #define _WINSOCK_DEPRECATED_NO_WARNINGS
27 
28 #else
29  // Unix/Linux
30  #include <sys/socket.h>
31 
32  #ifdef HAVE_UNISTD_H
33  #ifndef _XOPEN_SOURCE
34  #define _XOPEN_SOURCE
35  #endif
36  #include <unistd.h>
37  #endif
38 
39  #ifdef HAVE_SYS_SOCKIO_H
40  #include <sys/sockio.h>
41  #endif
42 
43  #ifdef HAVE_NETINET_IN_H
44  #include <netinet/in.h>
45  #endif
46  #ifdef HAVE_ARPA_INET_H
47  #include <arpa/inet.h>
48  #endif
49 
50  #include <netdb.h>
51 
52  #include <fcntl.h>
53  #include <sys/ioctl.h>
54  #include <net/if.h>
55 #endif
56 
57 
58 #define SEND_TIMEOUTED -97
59 #define RECV_TIMEOUTED -98
60 #define TRANS_TIMEOUTED -99
61 
62 
63 //#define LIPADDR 32 // IPアドレスの長さ
64 #define MAXIFNO 10
65 
66 
68 //
69 int init_network(void);
70 void cleanup_network(void);
71 
72 
74 // Berkeley Socket
75 
76 int udp_server_socket(int);
77 int udp_server_socket_setopt(int, int, const void*, int);
78 int udp_client_socket(char*, int, struct sockaddr_in*);
79 int udp_bind(int, int);
80 int udp_bind_setopt(int, int, int, const void*, int);
81 
82 int tcp_server_socket(int port);
83 int tcp_server_socket_setopt(int port, int, const void*, int);
84 int tcp_server_bind(int port);
85 int tcp_server_bind_setopt(int port, int, const void*, int);
86 
87 int tcp_client_socket(char* hname, int port);
88 int tcp_client_bind_socket(char* host, int sport, int cport);
89 int tcp_bind(int, int);
90 int tcp_bind_setopt(int, int, int, const void*, int);
91 int tcp_connect(int sock, char* host, int port);
92 
93 int accept_intr(int, struct sockaddr*, socklen_t*);
94 int socket_close(int sock);
95 
96 int get_valid_udp_socket(int min, int max, unsigned short* port);
97 int get_valid_tcp_server_socket(int min, int max, unsigned short* port);
98 int get_valid_tcp_client_socket(int min, int max, char* hostname, unsigned short sport, unsigned short* cport);
99 
100 
102 // Communication
103 
104 int udp_recv(int, char*, int, struct sockaddr_in*);
105 int udp_send(int, char*, int, struct sockaddr_in*);
106 int tcp_recv(int, char*, int);
107 int tcp_send(int, char*, int);
108 
109 int tcp_recv_wait(int sock, char* data, int sz, int tm);
110 int udp_recv_wait(int sock, char* data, int size, struct sockaddr_in* sv_addr, int tm);
111 
112 int tcp_send_mesgln(int, char*);
113 
114 int tcp_recv_mstream(int sock, char* mesg, int sz, mstream* sb, int tm);
115 
116 int recv_wait(int sock, int tm);
117 int recv_wait_twin(int sock1, int sock2, int tm);
118 int send_wait(int sock, int tm);
119 
120 void udp_hole_punching(int sock, struct sockaddr_in addr, int nm);
121 
122 
133 #define udp_send_mesg(sock, smsg, sv_addr) udp_send((sock), (smsg), 0, (sv_addr))
134 
135 
145 #define tcp_send_mesg(sock, smsg) tcp_send((sock), (smsg), 0)
146 
147 
149 // IP address
150 
151 char* get_ipaddr(struct in_addr);
152 char* get_ipaddr_byname(char*);
153 char* get_mynetaddr(void);
154 char* get_localip_bydest(char* dest);
155 
156 char* get_hostname_bynum(unsigned char*);
157 char* get_hostname(char*);
158 
159 unsigned char* get_ipaddr_num(struct in_addr);
160 unsigned char* get_ipaddr_byname_num(char*);
161 unsigned char* get_mynetaddr_num(void);
162 
163 
171 #define get_localip() get_localip_bydest("202.26.158.1")
172 
173 
174 #ifdef WIN32
175  #define get_myipaddr() get_localip_bydest("202.26.158.1")
176 #else
177  char* get_myipaddr(void);
178 #endif
179 unsigned char* get_myipaddr_num(void);
180 
181 struct sockaddr_in get_sockaddr(char* hostname, unsigned short cport);
182 struct sockaddr_in get_sockaddr_bynum(char* ipnum, unsigned short cport);
183 struct sockaddr_in get_local_sockaddr(unsigned short cport);
184 int is_same_sockaddr(struct sockaddr_in addr1, struct sockaddr_in addr2);
185 
186 unsigned char* to_address_num8(char* addr, int mode);
187 char* to_address_char8(unsigned char* addr);
188 unsigned char* to_address_num4(char* addr, int mode);
189 char* to_address_char4(unsigned char* addr);
190 
191 int is_same_network_num(unsigned char* addr1, unsigned char* addr2, unsigned char* mask);
192 int is_same_network(char* addr1, char* addr2, char* mask);
193 
194 
195 #endif
196 
197 
198 
int udp_bind_setopt(int, int, int, const void *, int)
call setsockopt(), bind()
Definition: network4.c:200
int udp_send(int, char *, int, struct sockaddr_in *)
Definition: network4.c:755
int get_valid_tcp_client_socket(int min, int max, char *hostname, unsigned short sport, unsigned short *cport)
Definition: network.c:1124
int tcp_bind_setopt(int, int, int, const void *, int)
call setsockopt(), bind()
Definition: network4.c:580
int tcp_send(int, char *, int)
Definition: network.c:1252
unsigned char * get_myipaddr_num(void)
自分の [IPアドレス],[ネットマスク](数字)
Definition: network4.c:1092
unsigned char * get_ipaddr_num(struct in_addr)
構造体  → IPv4アドレス(数字4byte)
Definition: network4.c:1310
int send_wait(int sock, int tm)
Definition: network.c:1518
int init_network(void)
Definition: network.c:26
struct sockaddr_in get_local_sockaddr(unsigned short cport)
Definition: network4.c:1477
int udp_bind(int, int)
call bind()
Definition: network4.c:163
void udp_hole_punching(int sock, struct sockaddr_in addr, int nm)
Definition: network4.c:1935
int udp_recv(int, char *, int, struct sockaddr_in *)
Definition: network4.c:726
int udp_recv_wait(int sock, char *data, int size, struct sockaddr_in *sv_addr, int tm)
Definition: network4.c:835
int tcp_recv_mstream(int sock, char *mesg, int sz, mstream *sb, int tm)
Definition: network.c:1395
char * get_ipaddr_byname(char *)
ホスト名 → IPv4アドレス(文字列) 
Definition: network4.c:1333
unsigned char * to_address_num8(char *addr, int mode)
IPアドレス(文字列)→ [IPアドレス],[ネットマスク](数字8byte)
Definition: network4.c:1620
unsigned char * get_ipaddr_byname_num(char *)
ホスト名 → IPv4アドレス(数字4byte)
Definition: network4.c:1361
unsigned char * get_mynetaddr_num(void)
自分の IPv4ネットワークアドレス(数字)
Definition: network4.c:1415
int tcp_send_mesgln(int, char *)
Definition: network.c:1345
int socket_close(int sock)
call shutdown(), close()
Definition: network.c:1022
char * get_hostname(char *)
IPv4アドレス(文字列)→ ホスト名(文字列)
Definition: network4.c:1026
int accept_intr(int, struct sockaddr *, socklen_t *)
call accept()
Definition: network.c:995
int is_same_network_num(unsigned char *addr1, unsigned char *addr2, unsigned char *mask)
Definition: network4.c:1543
int get_valid_tcp_server_socket(int min, int max, unsigned short *port)
Definition: network.c:1102
struct sockaddr_in get_sockaddr(char *hostname, unsigned short cport)
Definition: network4.c:1442
char * get_hostname_bynum(unsigned char *)
IPv4アドレス(数字) → ホスト名(文字列)
Definition: network4.c:990
unsigned char * to_address_num4(char *addr, int mode)
IPアドレス(文字列)→ [IPアドレス](数字4byte)
Definition: network4.c:1756
int tcp_server_bind_setopt(int port, int, const void *, int)
call socket(), setsockopt(), bind()
Definition: network4.c:394
char * get_localip_bydest(char *dest)
自分の IPv4アドレス(文字列)
Definition: network4.c:1221
int tcp_connect(int sock, char *host, int port)
call connect()
Definition: network4.c:656
char * get_ipaddr(struct in_addr)
構造体  → IPv4アドレス(文字列)
Definition: network4.c:1278
int tcp_recv_wait(int sock, char *data, int sz, int tm)
Definition: network.c:1317
int tcp_server_bind(int port)
call socket(), bind()
Definition: network4.c:353
char * get_myipaddr(void)
自分の [IPアドレス]/[ネットマスク](文字列)
Definition: network4.c:1188
int udp_server_socket_setopt(int, int, const void *, int)
call socket(), setsockopt(), bind()
Definition: network4.c:78
int tcp_client_bind_socket(char *host, int sport, int cport)
call socket(), bind(), connect()
Definition: network4.c:491
char * to_address_char4(unsigned char *addr)
[IPアドレス](数字4byte)→ IPアドレス(文字列)
Definition: network4.c:1816
struct sockaddr_in get_sockaddr_bynum(char *ipnum, unsigned short cport)
Definition: network4.c:1464
int recv_wait(int sock, int tm)
Definition: network.c:1443
int get_valid_udp_socket(int min, int max, unsigned short *port)
Definition: network.c:1078
int udp_client_socket(char *, int, struct sockaddr_in *)
call socket()
Definition: network4.c:129
int tcp_bind(int, int)
call bind()
Definition: network4.c:543
int is_same_network(char *addr1, char *addr2, char *mask)
Definition: network.c:2283
char * get_mynetaddr(void)
自分の IPv4ネットワークアドレス(文字列)
Definition: network4.c:1386
int is_same_sockaddr(struct sockaddr_in addr1, struct sockaddr_in addr2)
Definition: network4.c:1506
int tcp_client_socket(char *hname, int port)
call socket(), connect()
Definition: network4.c:444
int recv_wait_twin(int sock1, int sock2, int tm)
Definition: network.c:1480
int tcp_recv(int, char *, int)
Definition: network.c:1226
int tcp_server_socket_setopt(int port, int, const void *, int)
call socket(), setsockopt(), bind(), listen()
Definition: network4.c:298
int tcp_server_socket(int port)
call socket(), bind(), listen()
Definition: network4.c:249
char * to_address_char8(unsigned char *addr)
[IPアドレス],[ネットマスク](数字8byte)→ IPアドレス(文字列)
Definition: network4.c:1727
int udp_server_socket(int)
call socket(), bind()
Definition: network4.c:28
void cleanup_network(void)
Definition: network.c:40
汎用ツールヘッダ
#define mstream
バイト型 メッセージストリーム
Definition: tools.h:167