◆ソケットの生成
|
#include <sys/socket.h>
int socket (int domain, int type, int protocol);
domain :ソケットが使用するプロトコル情報 type :ソケットのデータ転送方式の情報 protocol :パソコン間通信に使用するプロトコル情報 |
domain
|
名前 |
プロトコルシステム |
|
PF_INET |
IPv4システム |
|
PF_INET6 |
IPv6システム |
|
PF_LOCAL |
ローカル通信のためのUNIXプロトコルシステム |
|
PF_PACKET |
Low Levelソケットのためのプロトコルシステム |
|
PF_IPX |
IPXノベル?プロトコルシステム |
|
SOCK_STREAM |
接続指向ソケット |
|
SOCK_DGRAM |
非接続指向ソケット |
|
struct sockaddr_in { sa_family_t sin_family; //住所システム(Address Family) uint16_t sin_port; //16ビット TCP/UDP PORT番号 struct in_addr sin_addr; //32ビット IP住所 char sin_zero[8] //使われてない }; |
|
struct in_addr { in_addr_t s_addr; //32ビット IPv4インターネット住所 }; |
|
Address Family |
意味 |
|
AF_INET AF_INET6 AF_LOCAL |
IPv4インターネットプロトコルに適用する住所システム IPv6インターネットプロトコルに適用する住所システム ローカル通信のためのUNIXプロトコルの住所システム |
16ビットPORT番号をセーブする(ネットワークバイト順)
メンバーsin_addr
32ビットIP住所情報をセーブする(同じくネットワークバイト順)
バイト順番の変換(Endian Conversions)
sockaddr_in構造体変数に値を入れる前にネットワークバイト順番に変換するので、バイト順番の変換を手伝ってくれる関数の一覧
-unsigned short htons(unsogned short);
-unsigned short ntohs(unsigned short);
-unsigned long htonl(unsigned long);
-unsigned long ntohl(unsigned long);
hはホスト、nはネットワーク、sはshort、lはlong
INADDR_ANY
サーバソケットの生成中サーバのIP住所を入力するのは面倒くさいから次のように初期化すれば良い
|
struct sockaddr_in addr; char *serv_port = "9190"; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_addr.s_addr = htonl(INADDR_ANY); addr.sin_port = htons(atoi(serv_port)); |