JunkBox_Lib 1.10.1
|
#include "tools.h"
#include <sys/socket.h>
#include <netdb.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <net/if.h>
Go to the source code of this file.
Macros | |
#define | _WINSOCK_DEPRECATED_NO_WARNINGS |
#define | SEND_TIMEOUTED -97 |
#define | RECV_TIMEOUTED -98 |
#define | TRANS_TIMEOUTED -99 |
#define | MAXIFNO 10 |
取り扱うネットワークインターフェイスの最大数 | |
#define | udp_send_mesg(sock, smsg, sv_addr) udp_send((sock), (smsg), 0, (sv_addr)) |
#define | tcp_send_mesg(sock, smsg) tcp_send((sock), (smsg), 0) |
#define | get_localip() get_localip_bydest("202.26.158.1") |
自分の IPアドレス(文字列) | |
Functions | |
int | init_network (void) |
void | cleanup_network (void) |
int | udp_server_socket (int) |
call socket(), bind() | |
int | udp_server_socket_setopt (int, int, const void *, int) |
call socket(), setsockopt(), bind() | |
int | udp_client_socket (char *, int, struct sockaddr_in *) |
call socket() | |
int | udp_bind (int, int) |
call bind() | |
int | udp_bind_setopt (int, int, int, const void *, int) |
call setsockopt(), bind() | |
int | tcp_server_socket (int port) |
call socket(), bind(), listen() | |
int | tcp_server_socket_setopt (int port, int, const void *, int) |
call socket(), setsockopt(), bind(), listen() | |
int | tcp_server_bind (int port) |
call socket(), bind() | |
int | tcp_server_bind_setopt (int port, int, const void *, int) |
call socket(), setsockopt(), bind() | |
int | tcp_client_socket (char *hname, int port) |
call socket(), connect() | |
int | tcp_client_bind_socket (char *host, int sport, int cport) |
call socket(), bind(), connect() | |
int | tcp_bind (int, int) |
call bind() | |
int | tcp_bind_setopt (int, int, int, const void *, int) |
call setsockopt(), bind() | |
int | tcp_connect (int sock, char *host, int port) |
call connect() | |
int | accept_intr (int, struct sockaddr *, socklen_t *) |
call accept() | |
int | socket_close (int sock) |
call shutdown(), close() | |
int | get_valid_udp_socket (int min, int max, unsigned short *port) |
int | get_valid_tcp_server_socket (int min, int max, unsigned short *port) |
int | get_valid_tcp_client_socket (int min, int max, char *hostname, unsigned short sport, unsigned short *cport) |
int | udp_recv (int, char *, int, struct sockaddr_in *) |
int | udp_send (int, char *, int, struct sockaddr_in *) |
int | tcp_recv (int, char *, int) |
int | tcp_send (int, char *, int) |
int | tcp_recv_wait (int sock, char *data, int sz, int tm) |
int | udp_recv_wait (int sock, char *data, int size, struct sockaddr_in *sv_addr, int tm) |
int | tcp_send_mesgln (int, char *) |
int | tcp_recv_mstream (int sock, char *mesg, int sz, mstream *sb, int tm) |
int | recv_wait (int sock, int tm) |
int | recv_wait_twin (int sock1, int sock2, int tm) |
int | send_wait (int sock, int tm) |
void | udp_hole_punching (int sock, struct sockaddr_in addr, int nm) |
char * | get_ipaddr (struct in_addr) |
構造体 → IPv4アドレス(文字列) | |
char * | get_ipaddr_byname (char *) |
ホスト名 → IPv4アドレス(文字列) | |
char * | get_mynetaddr (void) |
自分の IPv4ネットワークアドレス(文字列) | |
char * | get_localip_bydest (char *dest) |
自分の IPv4アドレス(文字列) | |
char * | get_hostname_bynum (unsigned char *) |
IPv4アドレス(数字) → ホスト名(文字列) | |
char * | get_hostname (char *) |
IPv4アドレス(文字列)→ ホスト名(文字列) | |
unsigned char * | get_ipaddr_num (struct in_addr) |
構造体 → IPv4アドレス(数字4byte) | |
unsigned char * | get_ipaddr_byname_num (char *) |
ホスト名 → IPv4アドレス(数字4byte) | |
unsigned char * | get_mynetaddr_num (void) |
自分の IPv4ネットワークアドレス(数字) | |
char * | get_myipaddr (void) |
自分の [IPアドレス]/[ネットマスク](文字列) | |
unsigned char * | get_myipaddr_num (void) |
自分の [IPアドレス],[ネットマスク](数字) | |
struct sockaddr_in | get_sockaddr (char *hostname, unsigned short cport) |
struct sockaddr_in | get_sockaddr_bynum (char *ipnum, unsigned short cport) |
struct sockaddr_in | get_local_sockaddr (unsigned short cport) |
int | is_same_sockaddr (struct sockaddr_in addr1, struct sockaddr_in addr2) |
unsigned char * | to_address_num8 (char *addr, int mode) |
IPアドレス(文字列)→ [IPアドレス],[ネットマスク](数字8byte) | |
char * | to_address_char8 (unsigned char *addr) |
[IPアドレス],[ネットマスク](数字8byte)→ IPアドレス(文字列) | |
unsigned char * | to_address_num4 (char *addr, int mode) |
IPアドレス(文字列)→ [IPアドレス](数字4byte) | |
char * | to_address_char4 (unsigned char *addr) |
[IPアドレス](数字4byte)→ IPアドレス(文字列) | |
int | is_same_network_num (unsigned char *addr1, unsigned char *addr2, unsigned char *mask) |
int | is_same_network (char *addr1, char *addr2, char *mask) |
#define _WINSOCK_DEPRECATED_NO_WARNINGS |
Definition at line 16 of file network4.h.
#define get_localip | ( | ) | get_localip_bydest("202.26.158.1") |
char* get_localip(void)
自分自身の IPアドレスを得るもう一つの方法.
リモートマシンに接続(ダミー)を試み,そのインターフェイス情報を獲得する.
Definition at line 171 of file network4.h.
#define MAXIFNO 10 |
Definition at line 64 of file network4.h.
Referenced by get_myipaddr_num().
#define RECV_TIMEOUTED -98 |
Definition at line 59 of file network4.h.
Referenced by tcp_recv_wait(), and udp_recv_wait().
#define SEND_TIMEOUTED -97 |
Definition at line 58 of file network4.h.
#define tcp_send_mesg | ( | sock, | |
smsg ) tcp_send((sock), (smsg), 0) |
int tcp_send_mesg(int sock, char* smsg)
TCP経由でメッセージ(文字列)を送信する.
sock | ソケット記述子 |
smsg | 送信用メッセージ |
0以上 | 送信したバイト数. |
-1 | 失敗. |
Definition at line 145 of file network4.h.
#define TRANS_TIMEOUTED -99 |
Definition at line 60 of file network4.h.
#define udp_send_mesg | ( | sock, | |
smsg, | |||
sv_addr ) udp_send((sock), (smsg), 0, (sv_addr)) |
int udp_send_mesg(int sock, char* smsg, struct sockaddr_in* sv_addr)
UDPで文字列データを送る.
sock | ソケット記述子 |
smsg | 送信するデータ |
sv_addr | サーバの情報を格納する sockaddar_in 構造体へのポインタ. |
0以上 | 送信したバイト数. |
-1 | 失敗. |
Definition at line 133 of file network4.h.
int accept_intr | ( | int | sock, |
struct sockaddr * | cl_addr, | ||
socklen_t * | cdlen ) |
int accept_intr(int sock, struct sockaddr* cl_addr, socklen_t* cdlen)
accept()でブロック中に割り込みが掛かって,accept()が失敗で終了しても 再施行できるようにするためのラッパー関数 (for Solaris)
sock | ソケット |
cl_addr | ソケットの情報が入る sockaddr 構造体へのポインタ |
cdlen | sockaddr 構造体(*cl_addr)のサイズ |
0以上 | accept() で作成されたソケット記述子. |
-1 | エラー. |
Definition at line 995 of file network.c.
void cleanup_network | ( | void | ) |
char * get_hostname | ( | char * | ipaddr | ) |
char* get_hostname(char* ipaddr)
IPアドレス(文字列)からホスト名を逆引きする.
FQDNを指定した場合は,正引きして逆引きするので,FQDNのチェックに使用できる.
ipaddr | IPアドレス(文字列)または FQDN |
Definition at line 1026 of file network4.c.
References get_hostname_bynum(), and to_address_num4().
char * get_hostname_bynum | ( | unsigned char * | num | ) |
char* get_hostname_bynum(unsigned char* num)
バイナリのIPアドレス(長さ4byte)からホスト名を逆引きする.
num | バイナリのIPアドレス(長さ4byte). |
Definition at line 990 of file network4.c.
References len.
Referenced by get_hostname().
char * get_ipaddr | ( | struct in_addr | sin_addr | ) |
char* get_ipaddr(struct in_addr sin_addr)
in_addr構造体から IPアドレスを獲得する.
sin_addr | sockaddr_in 構造体の sin_addr メンバ. |
Definition at line 1278 of file network4.c.
Referenced by get_localip_bydest().
char * get_ipaddr_byname | ( | char * | hostname | ) |
char* get_ipaddr_byname(char* hostname)
ホスト名から IPアドレスを獲得する.
hostname | ホスト名 |
Definition at line 1333 of file network4.c.
Referenced by get_localip_bydest().
unsigned char * get_ipaddr_byname_num | ( | char * | hostname | ) |
unsigned char* get_ipaddr_byname_num(char* hostname)
ホスト名から IPアドレスを獲得する.
hostname | ホスト名 |
Definition at line 1361 of file network4.c.
Referenced by to_address_num4(), and to_address_num8().
unsigned char * get_ipaddr_num | ( | struct in_addr | sin_addr | ) |
unsigned char* get_ipaddr_num(struct in_addr sin_addr)
in_addr 構造体から IPアドレスを獲得する.
sin_addr | sockaddr_in 構造体の sin_addr メンバ. |
Definition at line 1310 of file network4.c.
struct sockaddr_in get_local_sockaddr | ( | unsigned short | cport | ) |
Definition at line 1477 of file network4.c.
char * get_localip_bydest | ( | char * | dest | ) |
char* get_localip_bydest(char* dest)
接続先を指定して,そこへ接続する インターフェイスのIPアドレスを得る.自分自身の IPアドレスを得るもう一つの方法.
dest | 接続先の IPアドレス または FQDN |
Definition at line 1221 of file network4.c.
References get_ipaddr(), get_ipaddr_byname(), len, and socket_close().
char * get_myipaddr | ( | ) |
char* get_myipaddr()
ネットワークインターフェイスを検索し,一番最初に見つけた UP状態で, ループバックでないインターフェイスのIPアドレスと ネットマスクを返す.
ただし,検索するインターフェイスの数は MAXIFNO 以内であり,それより多いものは無視する.
ネットマスクが必要ないなら get_localip() を使用しても良い.
Definition at line 1188 of file network4.c.
References get_myipaddr_num().
Referenced by get_myipaddr_num().
unsigned char * get_myipaddr_num | ( | ) |
unsigned char* get_myipaddr_num()
ネットワークインターフェイスを検索し,一番最初に見つけた UP状態で, ループバックでないインターフェイスのIPアドレスとネットマスクを返す.
ただし,検索するインターフェイスの数は MAXIFNO 以内であり,それ以上は無視する.
自分自身のIPアドレスを知る方法としては, gethostname() と gethostbyname() を使う方法もある.
また,get_localip() の方法も使える.
Definition at line 1092 of file network4.c.
References len, MAXIFNO, and socket_close().
Referenced by get_myipaddr(), get_mynetaddr_num(), and get_mynetaddr_num().
char * get_mynetaddr | ( | ) |
char* get_mynetaddr()
自分のネットワークアドレスを返す
Definition at line 1386 of file network4.c.
References get_mynetaddr_num().
unsigned char * get_mynetaddr_num | ( | ) |
unsigned char* get_mynetaddr_num()
自分のネットワークアドレスを返す
Definition at line 1415 of file network4.c.
References get_myipaddr_num().
Referenced by get_mynetaddr(), and get_mynetaddr().
struct sockaddr_in get_sockaddr | ( | char * | hostname, |
unsigned short | cport ) |
Definition at line 1442 of file network4.c.
struct sockaddr_in get_sockaddr_bynum | ( | char * | ipnum, |
unsigned short | cport ) |
Definition at line 1464 of file network4.c.
int get_valid_tcp_client_socket | ( | int | min, |
int | max, | ||
char * | hostname, | ||
unsigned short | sport, | ||
unsigned short * | cport ) |
Definition at line 1124 of file network.c.
References tcp_client_bind_socket.
int get_valid_tcp_server_socket | ( | int | min, |
int | max, | ||
unsigned short * | port ) |
Definition at line 1102 of file network.c.
References tcp_server_socket.
int get_valid_udp_socket | ( | int | min, |
int | max, | ||
unsigned short * | port ) |
Definition at line 1078 of file network.c.
References udp_server_socket.
int init_network | ( | void | ) |
int is_same_network | ( | char * | addr1, |
char * | addr2, | ||
char * | mask ) |
int is_same_network(char* addr1, char* addr2, char* mask)
文字型アドレス addr1 と addr2が同じネットワークに属しているかどうかチェックする.
addr1, addr2 は FQDNでも可.
addr1 | 比較するアドレス(文字型).FQDN は不可 |
addr2 | 比較するアドレス(文字型).FQDN は不可 |
mask | ネットマスク(文字型) |
TRUE | 同じネットワークである. |
FALSE | 同じネットワークでない. |
int is_same_network(char* addr1, char* addr2, char* mask)
文字型アドレス addr1 と addr2が同じネットワークに属しているかどうかチェックする.
addr1, addr2 は FQDNでも可.
addr1 | 比較するアドレス(文字型) |
addr2 | 比較するアドレス(文字型) |
mask | ネットマスク(文字型) |
TRUE | 同じネットワークである. |
FALSE | 同じネットワークでない. |
Definition at line 2283 of file network.c.
References FALSE, freeNull, is_same_network_num(), is_same_network_num(), to_address_num(), and to_address_num4().
int is_same_network_num | ( | unsigned char * | addr1, |
unsigned char * | addr2, | ||
unsigned char * | mask ) |
int is_same_network_num(unsigned char* addr1, unsigned char* addr2, unsigned char* mask)
数字型アドレス addr1 と addr2が同じネットワークに属しているかどうかチェックする.
addr1 | 比較するアドレス(数字型)4Byte |
addr2 | 比較するアドレス(数字型)4Byte |
mask | ネットマスク(数字型)4Byte |
TRUE | 同じネットワークである. |
FALSE | 同じネットワークでない |
Definition at line 1543 of file network4.c.
Referenced by is_same_network().
int is_same_sockaddr | ( | struct sockaddr_in | addr1, |
struct sockaddr_in | addr2 ) |
int is_same_sockaddr(struct sockaddr_in addr1, struct sockaddr_in addr2)
addr1 と addr2が格納する IPアドレスとポート番号が同じかどうか検査する
addr1 | 比較する sockaddr_in 構造体 |
addr2 | 比較する sockaddr_in 構造体 |
TRUE | 同じホスト |
FALSE | 違うホスト |
Definition at line 1506 of file network4.c.
int recv_wait | ( | int | sock, |
int | tm ) |
int recv_wait(int sock, int tm)
簡易 受信 wait. ソケットにデータが受信されるまで待つ.スレッド対応
sock | 監視するソケット |
tm | タイムアウトの秒数 |
TRUE | バッファにデータがある. |
FALSE | タイムアウトした. |
int recv_wait(int sock, int tm)
簡易 受信wait. ソケットにデータが受信されるまで待つ.スレッド対応
sock | 監視するソケット |
tm | タイムアウトの秒数 |
TRUE | バッファにデータがある. |
FALSE | タイムアウトした. |
Definition at line 1443 of file network.c.
Referenced by recv_http_closed(), ssl_recv_wait(), ssl_tcp_recv_wait(), tcp_recv_wait(), udp_recv_wait(), udp_recv_wait(), udp_recv_wait_sockaddr_in(), and www2browser_relay().
int recv_wait_twin | ( | int | sock1, |
int | sock2, | ||
int | tm ) |
int recv_wait_twin(int sock1, int sock2, int tm)
簡易 受信 wait. 二つのソケット sock1, sock2 にデータが受信されるまで待つ.スレッド対応
sock1 | 監視するソケット その1 |
sock2 | 監視するソケット その2 |
tm | タイムアウトの秒数 |
0 | タイムアウトした. |
1 | sock1 のバッファにデータがある. |
2 | sock2 のバッファにデータがある. |
3 | sock1 と sock2 のバッファにデータがある. |
Definition at line 1480 of file network.c.
References Max.
int send_wait | ( | int | sock, |
int | tm ) |
int send_wait(int sock, int tm)
簡易 送信 wait. データが送信可能になるまで待つ.スレッド対応
sock | 監視するソケット |
tm | タイムアウトの秒数 |
TRUE | バッファにデータがある. |
FALSE | タイムアウトした. |
int send_wait(int sock, int tm)
簡易 送信wait. データが送信可能になるまで待つ.スレッド対応
sock | 監視するソケット |
tm | タイムアウトの秒数 |
TRUE | バッファにデータがある. |
FALSE | タイムアウトした. |
Definition at line 1518 of file network.c.
int socket_close | ( | int | sofd | ) |
未送信のデータを破棄して,ソケットを完全に閉じる.
sofd | クローズしたいソケット記述子を指定. |
1以上 | 最後に受信したバイト数 |
0 | 正常切断. |
-1 | エラー |
Definition at line 1022 of file network.c.
Referenced by _get_localip_bydest(), _tcp_bind(), _tcp_bind_setopt(), _tcp_client_bind_socket(), _tcp_client_socket(), _tcp_connect(), _tcp_server_bind(), _tcp_server_bind_setopt(), _tcp_server_socket(), _tcp_server_socket_setopt(), _udp_bind(), _udp_bind_setopt(), _udp_server_socket(), _udp_server_socket_setopt(), check_auth(), get_localip_bydest(), get_myipaddr_num(), get_valid_rtp_pair_sockets(), simple_web_proxy(), tcp_bind(), tcp_bind_setopt(), tcp_client_bind_socket(), tcp_client_socket(), tcp_server_bind(), tcp_server_bind_setopt(), tcp_server_socket(), tcp_server_socket_setopt(), udp_bind(), udp_bind_setopt(), udp_client_socket(), udp_client_socket_sockaddr_in(), udp_server_socket(), and udp_server_socket_setopt().
int tcp_bind | ( | int | sofd, |
int | port ) |
int tcp_bind(int sofd, int port)
TCPソケットにポートをバインドする.
sofd | バインドするソケットの記述子. |
port | ポート番号 |
sofd | 成功 |
-3 | 失敗 |
Definition at line 543 of file network4.c.
References socket_close().
int tcp_bind_setopt | ( | int | sofd, |
int | port, | ||
int | opt, | ||
const void * | optval, | ||
int | optlen ) |
int tcp_bind_setopt(int sofd, int port, int opt, const void* optval, int optlen)
TCPソケットにポートをバインドする.オプションの指定(setsockopt)が可能.
sofd | バインドするソケットの記述子. |
port | ポート番号 |
opt | オプションの種類 |
optval | オプションデータ |
optlen | optval の長さ |
0以上 | 作成されたソケット記述子. |
-2 | ソケットオプションの設定に失敗. |
-3 | バインドに失敗. |
Definition at line 580 of file network4.c.
References socket_close().
int tcp_client_bind_socket | ( | char * | hostname, |
int | sport, | ||
int | cport ) |
int tcp_client_bind_socket(char* hostname, int sport, int cport)
TCPのクライアントソケットを作り,サーバに接続する.
この関数内で呼び出されるネットワーク関数: socket(), bind(), gethostbyname(), connect()
hostname | サーバ名 |
sport | サーバポート番号 |
cport | 自分のポート番号 |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-3 | バインドに失敗. |
-4 | サーバ情報の取得に失敗. |
-5 | サーバへの接続に失敗. |
Definition at line 491 of file network4.c.
References socket_close().
int tcp_client_socket | ( | char * | hostname, |
int | port ) |
int tcp_client_socket(char* hostname, int port)
TCPのクライアントソケットを作り,サーバに接続する.
この関数内で呼び出されるネットワーク関数: socket(), gethostbyname(), connect()
hostname | サーバ名 |
port | サーバポート番号 |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-4 | サーバ情報の取得に失敗. |
-5 | サーバへの接続に失敗. |
Definition at line 444 of file network4.c.
References socket_close().
int tcp_connect | ( | int | sock, |
char * | host, | ||
int | port ) |
Definition at line 656 of file network4.c.
int tcp_recv | ( | int | sock, |
char * | rmsg, | ||
int | size ) |
int tcp_recv(int sock, char* rmsg, int size)
recv()をラッピングした関数.TCP経由でデータを受信する.
sock | ソケット記述子 |
rmsg | 受信用データバッファ.関数内で初期化される. |
size | データバッファのサイズ |
1以上 | 受信したバイト数. |
0 | 正常切断. |
JBXL_NET_RECV_ERROR | 失敗 |
int tcp_recv(int sock, char* rmsg, int size)
recv()をラッピングした関数.TCP経由でデータを受信する.
sock | ソケット記述子 |
rmsg | 受信用データバッファ |
size | データバッファのサイズ |
1以上 | 受信したバイト数. |
0 | 正常切断. |
-1 | 失敗 |
Definition at line 1226 of file network.c.
References JBXL_NET_RECV_ERROR.
int tcp_recv_mstream | ( | int | sock, |
char * | mesg, | ||
int | sz, | ||
mstream * | sb, | ||
int | tm ) |
int tcp_recv_mstream(int sock, char* mesg, int sz, mstream* sb, int tm)
TCP経由でメッセージ(文字列)を受信する.受信メッセージはメッセージストリームバッファに一旦バッファリングされ, この関数により一行ずつ読み出される.mesgには最大 sz-1文字が格納される. もし,バッファ中の一行のデータが sz-1より大きい場合は,はみ出した部分は捨てられる.
mesgに格納される時,行中の改行コードは削除され,行末には必ず '\0' が入る. タイムアウトの設定が可能でタイムアウトに 0を指定した場合, 呼び出した時点で 読み込み可能データがなければすぐにタイムアウトとなる (JBXL_NET_RECV_TIMEOUT が返る).
メッセージストリームのバッファ部が確保されていない場合は,最初に呼び出された時点で確保される. 一旦この関数を使用して,受信データをバッファリングしたら,ソケットをクローズするまで, 読み取りには必ず同じストリームを使用してこの関数を呼び出さばければならない. そうで無い場合は受信データの整合性は保証されない.
sock | ソケット記述子 |
mesg | 受信用データバッファ.予め十分なメモリ領域を確保しておく. |
sz | データバッファのサイズ |
sb | リングバッファ型のストリームバッファ. バッファ部が確保されていなければ,自動的に確保される. |
tm | タイムアウト時間.秒単位. |
1以上 | mesgに格納したメッセージのバイト数. |
0 | おそらくは相手側がセッションをクローズした. |
JBXL_NET_RECV_ERROR | 受信エラー. |
JBXL_ARGS_ERROR | 引数に NULLのデータがある. |
JBXL_MALLOC_ERROR | メッセージバッファ部が無いので確保しようとしたが,確保に失敗した. |
JBXL_NET_BUF_ERROR | メッセージバッファにデータは存在するはずだが,原因不明の理由により獲得に失敗した. |
JBXL_NET_BUFSZ_ERROR | メッセージバッファ中のデータの長さが,mesgの長さより大きい.はみ出した部分は捨てられた. |
JBXL_NET_RECV_TIMEOUT | タイムアウト. |
int tcp_recv_mstream(int sock, char* mesg, int sz, mstream* sb, int tm)
TCP経由でメッセージ(文字列)を受信する.受信メッセージはメッセージストリームバッファに一旦バッファリングされ, この関数により一行ずつ読み出される.mesgには最大 sz-1文字が格納される. もし,バッファ中の一行のデータが sz-1より大きい場合は,はみ出した部分は捨てられる.
mesgに格納される時,行中の改行コードは削除され,行末には必ず '\0' が入る. タイムアウトの設定が可能でタイムアウトに 0を指定した場合, 呼び出した時点で 読み込み可能データがなければすぐにタイムアウトとなる (RECV_TIMEOUTED が返る).
メッセージストリームのバッファ部が確保されていない場合は,最初に呼び出された時点で確保される. 一旦この関数を使用して,受信データをバッファリングしたら,ソケットをクローズするまで, 読み取りには必ず同じストリームを使用してこの関数を呼び出さばければならない. そうで無い場合は受信データの整合性は保証されない.
sock | ソケット記述子 |
mesg | 受信用データバッファ.予め十分なメモリ領域を確保しておく. |
sz | データバッファのサイズ |
sb | リングバッファ型のストリームバッファ. バッファ部が確保されていなければ,自動的に確保される. |
tm | タイムアウト時間.秒単位. |
1以上 | mesgに格納したメッセージのバイト数. |
0 | おそらくは相手側がセッションをクローズした. |
-1 | 受信エラー. |
-2 | 引数に NULLのデータがある. |
-3 | メッセージバッファ部が無いので確保しようとしたが,確保に失敗した. |
-4 | メッセージバッファにデータは存在するはずだが,原因不明の理由により獲得に失敗した. |
-5 | メッセージバッファ中のデータの長さが,mesgの長さより大きい.はみ出した部分は捨てられた. |
RECV_TIMEOUTED | タイムアウト. |
Definition at line 1395 of file network.c.
References get_mstream(), JBXL_ARGS_ERROR, JBXL_MALLOC_ERROR, JBXL_NET_BUF_ERROR, JBXL_NET_BUFSZ_ERROR, JBXL_NET_RECV_ERROR, make_mstream, put_mstream(), RECVBUFSZ, and tcp_recv_wait().
int tcp_recv_wait | ( | int | sock, |
char * | mesg, | ||
int | sz, | ||
int | tm ) |
int tcp_recv_wait(int sock, char* mesg, int sz, int tm)
TCP経由でデータを受信する.
タイムアウトの設定が可能.タイムアウトに 0を指定した場合, recv_wait() 関数を呼び出した時点で読み込み可能データがなければすぐにタイムアウトとなる (JBXL_NET_RECV_TIMEOUT が返る).
sock | ソケット記述子 |
mesg | 受信用データバッファ.関数内で初期化される. |
sz | データバッファのサイズ |
tm | タイムアウト時間.秒単位. |
1以上 | 受信したバイト数. |
0 | おそらくは相手側がセッションをクローズした. |
JBXL_NET_RECV_ERROR | 受信エラー. |
JBXL_NET_RECV_TIMEOUT | タイムアウト. |
int tcp_recv_wait(int sock, char* mesg, int sz, int tm)
TCP経由でデータを受信する.
タイムアウトの設定が可能.タイムアウトに 0を指定した場合, recv_wait() 関数を呼び出した時点で読み込み可能データがなければすぐにタイムアウトとなる (RECV_TIMEOUTED が返る).
sock | ソケット記述子 |
mesg | 受信用データバッファ |
sz | データバッファのサイズ |
tm | タイムアウト時間.秒単位. |
1以上 | 受信したバイト数. |
0 | おそらくは相手側がセッションをクローズした. |
-1 | 受信エラー. |
RECV_TIMEOUTED | タイムアウト. |
Definition at line 1317 of file network.c.
References JBXL_NET_RECV_ERROR, JBXL_NET_RECV_TIMEOUT, RECV_TIMEOUTED, and recv_wait().
Referenced by tcp_recv_Buffer_wait(), and tcp_recv_mstream().
int tcp_send | ( | int | sock, |
char * | smsg, | ||
int | size ) |
int tcp_send(int sock, char* smsg, int size)
send()をラッピングした関数.TCP経由でデータを送る.
データ(smsg)のサイズ sizeに0以下を指定した場合は,smsgは文字列であると見なして,サイズを自動的に計算する.
sock | ソケット記述子 |
smsg | 送信するデータ |
size | 送信するデータ(smsg)のサイズ.サイズが 0以下の場合は smsgは文字列であるとみなす. |
0以上 | 送信したバイト数. |
JBXL_NET_SEND_ERROR | 失敗 |
int tcp_send(int sock, char* smsg, int size)
send()をラッピングした関数.TCP経由でデータを送る.
データ(smsg)のサイズ sizeに0以下を指定した場合は,smsgは文字列であると見なして,サイズを自動的に計算する.
sock | ソケット記述子 |
smsg | 送信するデータ |
size | 送信するデータ(smsg)のサイズ.サイズが 0以下の場合は smsgは文字列であるとみなす. |
0以上 | 送信したバイト数. |
-1 | 失敗. |
Definition at line 1252 of file network.c.
References JBXL_NET_SEND_ERROR.
Referenced by send_http_passwd_req(), send_http_res_file(), and simple_web_proxy().
int tcp_send_mesgln | ( | int | sock, |
char * | mesg ) |
int tcp_send_mesgln(int sock, char* mesg)
TCPメッセージ(文字列)に改行(\r\n)を付け加えて送信する.
sock | ソケット記述子 |
mesg | 送信用メッセージ |
0以上 | 送信したバイト数. |
JBXL_NET_SEND_ERROR | 失敗. |
int tcp_send_mesgln(int sock, char* mesg)
TCPメッセージ(文字列)に改行(\r\n)を付け加えて送信する.
sock | ソケット記述子 |
mesg | 送信用メッセージ |
0以上 | 送信したバイト数. |
-1 | 失敗. |
Definition at line 1345 of file network.c.
References buf, and JBXL_NET_SEND_ERROR.
int tcp_server_bind | ( | int | port | ) |
TCPのサーバのソケット記述子を作り,バインドする. tcp_server_socket() との違いは listen()関数を呼び出さない点にある.
この関数内で呼び出されるネットワーク関数: socket(), bind()
port | ポート番号. |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-3 | バインドに失敗. |
Definition at line 353 of file network4.c.
References socket_close().
int tcp_server_bind_setopt | ( | int | port, |
int | opt, | ||
const void * | optval, | ||
int | optlen ) |
int tcp_server_bind_setopt(int port, int opt, const void* optval, int optlen)
TCPのサーバのソケット記述子を作り,バインドする.オプションの指定(setsockopt)が可能. tcp_server_socket() との違いは listen()関数を呼び出さない点にある.
この関数内で呼び出されるネットワーク関数: socket(), setsockopt(), bind()
port | ポート番号 |
opt | オプションの種類 |
optval | オプションデータ |
optlen | optval の長さ |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-2 | ソケットオプションの設定に失敗. |
-3 | バインドに失敗. |
Definition at line 394 of file network4.c.
References socket_close().
int tcp_server_socket | ( | int | port | ) |
int tcp_server_socket(int port)
TCPのサーバソケットを作り,リッスンにより接続要求を受けられる状態にする.
この関数に続いて accept()関数を呼ぶ事により,実際の接続待ち状態となる.
この関数内で呼び出されるネットワーク関数は socket(), bind(), listen()
port | ポート番号. |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-3 | バインドに失敗. |
-6 | リッスンの設定に失敗. |
Definition at line 249 of file network4.c.
References socket_close().
int tcp_server_socket_setopt | ( | int | port, |
int | opt, | ||
const void * | optval, | ||
int | optlen ) |
int tcp_server_socket_setopt(int port, int opt, const void* optval, int optlen)
TCPのサーバソケットを作り,リッスンにより接続要求を受けられる状態にする.
この関数に続いて accept()関数を呼ぶ事により,実際の接続待ち状態となる. オプションの指定(setsockopt)が可能.
この関数内で呼び出されるネットワーク関数は socket(), setsockopt(), bind(), listen()
port | ポート番号 |
opt | オプションの種類 |
optval | オプションデータ |
optlen | optval の長さ |
0以上 | 作成されたソケット記述子. |
-1 | ソケットの作成に失敗. |
-2 | ソケットオプションの設定に失敗. |
-3 | バインドに失敗. |
-6 | リッスンの設定に失敗. |
Definition at line 298 of file network4.c.
References socket_close().
char * to_address_char4 | ( | unsigned char * | n | ) |
char* to_address_char4(unsigned char* n)
数字型の IPアドレス n 4Byteを文字型の [IPアドレス] に変換する.
n は必ず長さが 4Byteでないといけない.4Byteより少ない場合は恐らくセグメンテーションエラーを起こす.
to_address_num4()と対で使うのが安全.
n | 長さが 4byteのバイナリの [IPアドレス] |
Definition at line 1816 of file network4.c.
char * to_address_char8 | ( | unsigned char * | n | ) |
char* to_address_char8(unsigned char* n)
数字型の IPアドレス n 8Byteを文字型の [IPアドレス]/[ネットマスク] に変換する.
n は必ずネットマスクの情報を含み,長さが 8Byteでないといけない.8Byteより少ない場合は 恐らくセグメンテーションエラーを起こす.
to_address_num()と対で使うのが安全.
n | 長さが 8byteの バイナリの [IPアドレス],[ネットマスク] |
Definition at line 1727 of file network4.c.
unsigned char * to_address_num4 | ( | char * | addr, |
int | mode ) |
unsigned char* to_address_num4(char* addr, int mode)
文字型のアドレス [IPアドレス] (例:202.26.159.140)を 数字型のアドレス(unsigned char* num[4])4Byte へ変換する.
省略された場所は 0とみなされる(例:202.26 → 202.26.0.0)
addr | 変換する文字型のIPアドレス |
mode | 0: IPアドレス以外のもの(英字)は NULL を返す. |
mode | 0以外: FQDNはIPアドレスに変換して返す(時間がかかる) |
Definition at line 1756 of file network4.c.
References awk(), and get_ipaddr_byname_num().
Referenced by get_hostname(), and is_same_network().
unsigned char * to_address_num8 | ( | char * | addr, |
int | mode ) |
unsigned char* to_address_num8(char* addr, int mode)
文字型のアドレス [IPアドレス]/[ネットマスク] (例:202.26.159.140/255.255.255.0)を 数字型のアドレス(unsigned char* num[8])8Byte へ変換する.
省略された場所は 0とみなされる(例:202.26/255 → 202.26.0.0/255.0.0.0)
ネットマスク部全体が省略された場合は IPアドレス部に依存する.(202.26. → 202.26.0.0/255.255.0.0)
CIDER形式にも対応.ただし,ネットマスク部の妥当性はチェックしない.
addr | 変換する文字型のIPアドレス |
mode | 0: IPアドレス以外のもの(英字)は NULL を返す. |
mode | 0以外: FQDNはIPアドレスに変換して返す(時間がかかる) |
Definition at line 1620 of file network4.c.
References awk(), get_ipaddr_byname_num(), Max, Min, OFF, and ON.
int udp_bind | ( | int | sofd, |
int | port ) |
int udp_bind(int sofd, int port)
UDPソケットにポートをバインドする.
sofd | バインドするソケットの記述子. |
port | ポート番号 |
sofd | 成功 |
-3 | 失敗 |
Definition at line 163 of file network4.c.
References socket_close().
int udp_bind_setopt | ( | int | sofd, |
int | port, | ||
int | opt, | ||
const void * | optval, | ||
int | optlen ) |
int udp_bind_setopt(int sofd, int port, int opt, const void* optval, int optlen)
UDPソケットにポートをバインドする.オプションの指定(setsockopt)が可能.
sofd | バインドするソケットの記述子. |
port | ポート番号 |
opt | オプションの種類 |
optval | オプションデータ |
optlen | optval の長さ |
0以上 | 作成されたソケット記述子. |
-2 | ソケットオプションの設定に失敗 |
-3 | バインドに失敗. |
Definition at line 200 of file network4.c.
References socket_close().
int udp_client_socket | ( | char * | hostname, |
int | port, | ||
struct sockaddr_in * | sv_addr ) |
int udp_client_socket(char* hostname, int port, struct sockaddr_in* sv_addr)
UDPのクライアントソケットを作る. 正常終了した場合, *sv_addrにサーバの情報が格納される.
この関数内で呼び出されるネットワーク関数: socket(), gethostbyname()
hostname | サーバ名 |
port | サーバポート番号 |
sv_addr | sockaddr_in 構造体へのポインタ |
0以上 | 作成されたソケット記述子. |
-1 | ソケットが作成できなかった. |
-4 | サーバ情報の取得に失敗. |
Definition at line 129 of file network4.c.
References socket_close().
void udp_hole_punching | ( | int | sock, |
struct sockaddr_in | addr, | ||
int | nm ) |
void udp_hole_punching(int sock, struct sockaddr_in addr, int nm)
sock を使って,addrへ nmバイトの NULLデータを送信する.
sock | ソケット記述子 |
addr | 相手のホストの情報が格納されて sockaddr_in 構造体 |
nm | 送信するデータ(NULL)の長さ |
Definition at line 1935 of file network4.c.
References LBUF, and udp_send().
int udp_recv | ( | int | sock, |
char * | rmsg, | ||
int | size, | ||
struct sockaddr_in * | sv_addr ) |
int udp_recv(int sock, char* rmsg, int size, struct sockaddr_in* sv_addr)
recvform() をラッピングした関数.UDPデータを受信する.
sock | ソケット記述子 |
rmsg | 受信用データバッファ |
size | データバッファのサイズ |
sv_addr | サーバの情報が格納された sockaddr_in 構造体へのポインタ. |
1以上 | 受信したバイト数. |
0 | 正常切断. |
-1 | 失敗 |
Definition at line 726 of file network4.c.
Referenced by udp_recv_wait().
int udp_recv_wait | ( | int | sock, |
char * | rmsg, | ||
int | size, | ||
struct sockaddr_in * | sv_addr, | ||
int | tm ) |
int udp_recv_wait(int sock, char* rmsg, int size, struct sockaddr_in* sv_addr, int tm)
UDP経由でデータを受信する.
タイムアウトの設定が可能.タイムアウトに 0を指定した場合, recv_wait() 関数を呼び出した時点で読み込み可能データがなければすぐにタイムアウトとなる (RECV_TIMEOUTED が返る).
sock | ソケット記述子 |
rmsg | 受信用データバッファ |
size | データバッファのサイズ |
sv_addr | サーバの情報が格納された sockaddar_in 構造体へのポインタ. |
tm | タイムアウト時間.秒単位. |
1以上 | 受信したバイト数. |
0 | 正常切断. |
-1 | 失敗. |
RECV_TIMEOUTED | タイムアウト. |
Definition at line 835 of file network4.c.
References RECV_TIMEOUTED, recv_wait(), and udp_recv().
int udp_send | ( | int | sock, |
char * | smsg, | ||
int | size, | ||
struct sockaddr_in * | sv_addr ) |
int udp_send(int sock, char* smsg, int size, struct sockaddr_in* sv_addr)
sendto() をラッピングした関数.UDP経由でデータを送る.
データ(smsg)のサイズ sizeに0以下を指定した場合は,smsgは文字列で あると見なしてサイズを自動的に計算する.
sock | ソケット記述子 |
smsg | 送信するデータ |
size | 送信するデータ(smsg)のサイズ.サイズが 0以下の場合は smsgは文字列であるとみなす. |
sv_addr | サーバの情報を格納する sockaddar_in 構造体へのポインタ. |
0以上 | 送信したバイト数. |
-1 | 失敗 |
Definition at line 755 of file network4.c.
Referenced by udp_hole_punching().
int udp_server_socket | ( | int | port | ) |
int udp_server_socket(int port)
UDPのサーバソケットを作り,接続待ち状態になる.
この関数内で呼び出されるネットワーク関数: socket(), bind()
port | ポート番号 |
0以上 | 作成されたソケット記述子. |
-1 | ソケットが作成できなかった. |
-3 | バインドに失敗. |
Definition at line 28 of file network4.c.
References socket_close().
int udp_server_socket_setopt | ( | int | port, |
int | opt, | ||
const void * | optval, | ||
int | optlen ) |
int udp_server_socket_setopt(int port, int opt, const void* optval, int optlen)
UDPのサーバソケットを作り,接続待ち状態になる.オプションの指定(setsockopt)が可能.
この関数内で呼び出されるネットワーク関数: socket(), setsockopt(), bind()
port | ポート番号 |
opt | オプションの種類 |
optval | オプションデータ |
optlen | optval の長さ |
0以上 | 作成されたソケット記述子. |
-1 | ソケットが作成できなかった. |
-2 | ソケットオプションの設定に失敗. |
-3 | バインドに失敗. |
Definition at line 78 of file network4.c.
References socket_close().