#include <sys/socket.h> int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen) sockfd : ソケットディスクリプタ(接続済みソケット) addr : ソケットアドレス構造体へのポインタ addrlen : ソケットアドレス構造体の大きさへのポインタ
参考1: ソケットアドレス構造体
struct sockaddr {
uint8_t sa_len;
sa_family_t sa_family; // アドレスファミリ( AF_*** )
char sa_data[14]; // プロトコル依存
};
#include <netinet/in.h>
struct in_addr {
in_addr_t s_addr; // 32 ビットの IPv4 アドレス
// ネットワークバイト順序
};
struct sockaddr_in {
uint8_t sin_len; // 構造体の大きさ( 16 バイト)
sa_family_t sin_family; // AF_INET
in_port_t sin_port; // 16 ビットのポート番号
// ネットワークバイト順序
struct in_addr sin_addr; // 32 ビット IPv4 アドレス
// ネットワークバイト順序
char sin_zero[8]; // 未使用
};
#include <netinet/in.h>
#define SIN6_LEN
struct in6_addr {
uint8_t s6_addr[16]; // 128 ビットの IPv6 アドレス
// ネットワークバイト順序
};
struct sockaddr_in6 {
uint8_t sin6_len; // 構造体の大きさ( 24 バイト)
sa_family_t sin6_family; // AF_INET6
in_port_t sin6_port; // トランスポート層ポート番号
// ネットワークバイト順序
uint32_t sin6_flowinfo; // 優先度フローラベル
// ネットワークバイト順序
struct in6_addr sin6_addr; // IPv6 アドレス
// ネットワークバイト順序
};
| データ型 | 説明 | ヘッダ |
|---|---|---|
| int8_t | 8 ビット符号付き整数 | <sys.types.h> |
| uint8_t | 8 ビット符号なし整数 | <sys.types.h> |
| int16_t | 16 ビット符号付き整数 | <sys.types.h> |
| uint16_t | 16 ビット符号なし整数 | <sys.types.h> |
| int32_t | 32 ビット符号付き整数 | <sys.types.h> |
| uint32_t | 32 ビット符号なし整数 | <sys.types.h> |
| sa_family_t | ソケットアドレス構造体のアドレスファミリ | <sys.socket.h> |
| socklen_t | ソケットアドレス構造体の大きさ( uint32_t ) | <sys.socket.h> |
| in_addr_t | IPv4 アドレス( uint32_t ) | <netinet.in.h> |
| in_port_t | TCP あるいは UDP のポート番号( uint16_t ) | <netinet.in.h> |
| 菅沼ホーム | 本文目次 | 演習問題解答例 | 付録目次 | 索引 |