-
소켓 구조체Socket통신/Socket통신 2022. 4. 9. 13:27
소켓을 사용하기 위해 필수적으로 사용되는 sockaddr 구조체와 sockaddr_in 구조체를 공부하도록 하겠다.
다음은 sockaddr 구조체의 정의다.
typedef struct sockaddr {
u_short sa_family; // Address family.
CHAR sa_data[14]; // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;
sa_family는 2바이트 크기로 주소 체계를 지정한다.
TCP , UDP 프로토콜은 AF_INET(PF_INET)을 사용하게 된다.
sa_data[14]는 6바이트에 IP 주소와 포트 번호가 지정되며 나머지 8바이트는 예약되어 사용되지 않는다.
위 구조체는 프로그램에서 IP 주소와 포트 번호를 지정하기 위해 비트연산을 수행해야 하므로 좀더 사용하기 편한 sockaddr_int 구조체를 사용할 수 있다.
다음은 sockaddr_int 구조체의 정의다.
typedef struct sockaddr_in {
short sin_family;
USHORT sin_port;
IN_ADDR sin_addr;
CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;
로 정의되어 IP 주소와 포트 번호를 쉽게 지정하여 사용할 수 있다.
sin_family에는 2바이트 주소 체계를 지정한다.
sin_port에는 2바이트 정수 포트 번호를 지정한다.
sin_addr에는 4바이트 정수 IP 주소를 지정한다.
sin_zero[8]는 예약되어 사용되지 않는다.IN_ADDR 구조체의 정의로 IP 주소를 1,2,4 바이트 단위로 쉽게 접근할 수 있도록 제공하는 구조체다.
typedef struct in_addr {
union {
struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { USHORT s_w1,s_w2; } S_un_w;
ULONG S_addr;
} S_un;
#define s_addr S_un.S_addr /* can be used for most tcp & ip code */
#define s_host S_un.S_un_b.s_b2 // host on imp
#define s_net S_un.S_un_b.s_b1 // network
#define s_imp S_un.S_un_w.s_w2 // imp
#define s_impno S_un.S_un_b.s_b4 // imp #
#define s_lh S_un.S_un_b.s_b3 // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;sockaddr 구조체와 sockaddr_in 구조체를 비교한 그림
'Socket통신 > Socket통신' 카테고리의 다른 글
TCP 서버 / 클라이언트 기본코드 (0) 2022.04.09 TCP 소켓 서버/클라이언트 프로그램 흐름과 구조 (0) 2022.04.09 IP 주소 변환 / 바이트 정렬 (0) 2022.04.09 윈도우 소켓 / 환경구축 (0) 2022.04.09 TCP/IP 프로토콜 (0) 2022.04.09