728x90

주소 표현을 위한 구조체

- sockaddr 구조체 : 주소 표현을 위한 구조체

struct sockaddr {
          u_short    sa_family;     // 주소 체계
          char    sa_data[14];     // Port number + IP address
};

- sockaddr_in 구조체와 in_addr 구조체

    -> IPv4(AF_INET)의 주소 표현을 위한 구조체

    -> sockaddr 구조체가 IPv4의 주소 정보를 표현하기에 불편하기 때문에 사용

    -> sin_zero는 sockaddr과 크기를 맞추기 위해 사용

typedef struct sockaddr_in {
  short          sin_family;		// 주소 체계
  u_short        sin_port;			// 포트 번호
  struct in_addr sin_addr;			// 32비트 IP 주소
  char           sin_zero[8];		// 사용x
} SOCKADDR_IN, *PSOCKADDR_IN, *LPSOCKADDR_IN;

typedef struct in_addr {
  union {
    struct { u_char  s_b1, s_b2, s_b3, s_b4; } S_un_b;
    struct { u_short s_w1, s_w2; } S_un_w;
    u_long S_addr;      
  } S_un;
} IN_ADDR, *PIN_ADDR, *LPIN_ADDR;

#define s_addr	S_un.S_addr         // IPv4 사용
#define s_host	S_un.S_un_b.s_b2
#define s_net	S_un.S_un_b.s_b1
#define s_imp	S_un.S_un_w.s_w2
#define s_impno	S_un.S_un_b.s_b4
#define s_lh	S_un.S_un_b.s_b3

- bind 함수의 두번째 인자는 struct sockaddr의 주소값이기 때문에 형변환하여 전달

SOCKET hServSock;
struct sockaddr_in servAddr;		
  
memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons(atoi(argv[1]));
	
if(bind(hServSock, (struct sockaddr*) &servAddr, sizeof(servAddr))==SOCKET_ERROR)

 

728x90

+ Recent posts