2.5.2 bind [TCP/IP 소켓 프로그래밍 with 윈도우즈]

윈속 라이브러리에서는 소켓과 로컬 네트워크 인터페이스와 결합하는 bind 함수를 제공합니다.

소켓과 로컬 네트워크 인터페이스를 결합하는 함수
int bind(SOCKET sock,const struct sockaddr *addr,int addrlen);
실패 시: -1(SOCKET_ERROR) 반환
소켓 주소 구조체
typedef struct sockaddr {
    u_short sa_family;                  //소켓 주소 체계
    CHAR sa_data[14];                   //상위 14바이트 주소
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;
IPv4 소켓 주소 구조체
typedef struct sockaddr_in {
    short   sin_family;                 //소켓 주소 체계, IPv4는 AF_INET(PF_INET과 같음)
    USHORT sin_port;                    //포트 번호
    IN_ADDR sin_addr;                   //IPv4 주소
    CHAR sin_zero[8];                   //항상 0
} SOCKADDR_IN, *PSOCKADDR_IN;

소켓 통신 프로그램 중에 서버는 로컬 네트워크 인터페이스와 결합하는 과정은 필수입니다. 서버에서는 약속한 주소(서버 네트워크 주소와 포트)로 결합하면 클라이언트 측에서는 연결을 요청할 수 있습니다.

윈속을 사용하여 IPv4 소켓 주소를 표현할 때는 struct sockaddr_in 형식 변수에 소켓 주소 체계를 AF_INET으로 지정하고 자신의 IPv4 주소와 사용할 포트 번호를 지정합니다. 그리고 IPv4에서는 사용하지 않는 나머지 부분은 항상 0으로 설정합니다.

struct sockaddr_in servaddr={0};
servaddr.sin_family = AF_INET;
servaddr.sin_addr = GetDefaultMyIP();
servaddr.sin_port = htons(10200);
int re = 0;
re = bind(sock,(struct sockaddr *)&servaddr,sizeof(servaddr));
if(re == -1)
{
    printf("bind 실패\n");
    return 0;
}
printf("bind 성공\n");