Linux Socket関連関数のメモ
2589 ワード
【以下、基本的に転載】
1、構造体struct sockaddr,struct sockaddr_in, struct in_addr
ユニバーサルソケットデータ接合
実際に使用されているソケットデータ構造は、タイプ変換を行うことができます.
IPアドレスのデータ構造:
2、バイト順変換関数
3、文字転送IPアドレスとバイナリIPアドレスの変換
2つの更新関数inet_ptonとinet_ntop、この2つの関数はipv 4とipv 6を処理することができ、原型は以下の通りである.
この関数は文字列をネットワークアドレスに変換し,最初のパラメータafはアドレスファミリーであり,変換後にdstに存在する.
inet_ptonはinet_addrの拡張、サポートされているマルチアドレスファミリーは以下のとおりです.
AF_INET:srcは文字型のアドレス、すなわちASCIIのアドレスを指すヘッダアドレス(ddd.ddd.ddd.ddd.dddフォーマット)であり、関数はこのアドレスをin_に変換するaddrの構造体を*dstにコピー
AF_INET 6:rcはIPV 6を指すアドレスであり、関数はこのアドレスをin 6_に変換するaddrの構造体を*dstにコピー
関数エラーが負の値を返し、errnoがEAFNOSUPPORTに設定されている場合、パラメータafで指定されたアドレスファミリーとsrcフォーマットが間違っている場合、関数は0を返します.
関数inet_ntopの逆変換プロトタイプは以下の通りである.
この関数はネットワークバイナリ構造をASCIIタイプのアドレスに変換し,パラメータの役割は上と同じで,ただ1つのパラメータが増えただけである.
4、一般的な使い方は次のとおりです.
1、構造体struct sockaddr,struct sockaddr_in, struct in_addr
ユニバーサルソケットデータ接合
struct sockaddr {
unsigned short sa_family; /* , AF_xxx */
char sa_data[14]; /* 14 */
};
実際に使用されているソケットデータ構造は、タイプ変換を行うことができます.
struct sockaddr_in {
short int sin_family; /* */
unsigned short int sin_port; /* */
struct in_addr sin_addr; /* Internet */
unsigned char sin_zero[8]; /* struct sockaddr */
};
IPアドレスのデータ構造:
struct in_addr {
unsigned long s_addr;
};
2、バイト順変換関数
#include <arpa/inet.h>
uint32_t htonl (uint32_t hostlong) //
uint16_t htons (uint16_t hostshort) //
uint32_t ntohl (uint32_t netlong) //
uint16_t ntohs(uint16_t netshort) //
3、文字転送IPアドレスとバイナリIPアドレスの変換
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int inet_aton (const char *str, struct in_addr *addr) // in_addr
in_addr inet_addr (const char *str) // in_addr
char *inet_ntoa (struct in_addr addr) // in_addr
2つの更新関数inet_ptonとinet_ntop、この2つの関数はipv 4とipv 6を処理することができ、原型は以下の通りである.
int inet_pton(int af, const char *src, void *dst)
この関数は文字列をネットワークアドレスに変換し,最初のパラメータafはアドレスファミリーであり,変換後にdstに存在する.
inet_ptonはinet_addrの拡張、サポートされているマルチアドレスファミリーは以下のとおりです.
AF_INET:srcは文字型のアドレス、すなわちASCIIのアドレスを指すヘッダアドレス(ddd.ddd.ddd.ddd.dddフォーマット)であり、関数はこのアドレスをin_に変換するaddrの構造体を*dstにコピー
AF_INET 6:rcはIPV 6を指すアドレスであり、関数はこのアドレスをin 6_に変換するaddrの構造体を*dstにコピー
関数エラーが負の値を返し、errnoがEAFNOSUPPORTに設定されている場合、パラメータafで指定されたアドレスファミリーとsrcフォーマットが間違っている場合、関数は0を返します.
関数inet_ntopの逆変換プロトタイプは以下の通りである.
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
この関数はネットワークバイナリ構造をASCIIタイプのアドレスに変換し,パラメータの役割は上と同じで,ただ1つのパラメータが増えただけである.
4、一般的な使い方は次のとおりです.
int sockfd;
struct sockaddr_in my_addr;
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
perror("socket");
exit(1);
}
bzero(&my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(port);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.3");