유닉스 소켓-구조

Unix 소켓 프로그래밍에서는 주소, 포트 및 기타 정보에 대한 정보를 보유하기 위해 다양한 구조가 사용됩니다. 대부분의 소켓 함수에는 소켓 주소 구조에 대한 포인터가 인수로 필요합니다. 이 장에서 정의 된 구조는 인터넷 프로토콜 제품군과 관련이 있습니다.

양말

첫 번째 구조는 소켓 정보를 보유하는 sockaddr 입니다.

struct sockaddr {
   unsigned short   sa_family;
   char             sa_data[14];
};

이것은 대부분의 소켓 함수 호출에서 전달되는 일반적인 소켓 주소 구조입니다. 다음 테이블은 멤버 필드에 대한 설명을 제공합니다-

속성 가치 기술
sa_family

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

주소 패밀리를 나타냅니다. 대부분의 인터넷 기반 응용 프로그램에서 AF_INET을 사용합니다.
sa_data 프로토콜 별 주소 14 바이트 프로토콜 특정 주소의 내용은 주소 유형에 따라 해석됩니다. 인터넷 제품군의 경우 아래 정의 된 sockaddr_in 구조 로 표시되는 포트 번호 IP 주소를 사용 합니다.

sockaddr에

소켓의 요소를 참조하는 데 도움이되는 두 번째 구조는 다음과 같습니다.

struct sockaddr_in {
   short int            sin_family;
   unsigned short int   sin_port;
   struct in_addr       sin_addr;
   unsigned char        sin_zero[8];
};

다음은 멤버 필드에 대한 설명입니다.

속성 가치 기술
sa_family

AF_INET

AF_UNIX

AF_NS

AF_IMPLINK

주소 패밀리를 나타냅니다. 대부분의 인터넷 기반 응용 프로그램에서 AF_INET을 사용합니다.
sin_port 서비스 포트 네트워크 바이트 순서의 16 비트 포트 번호입니다.
sin_addr IP 주소 네트워크 바이트 순서의 32 비트 IP 주소입니다.
sin_zero 미사용 사용되지 않으므로이 값을 NULL로 설정했습니다.

추가로

이 구조는 위 구조에서만 구조 필드로 사용되며 32 비트 netid / hostid를 보유합니다.

struct in_addr {
   unsigned long s_addr;
};

다음은 멤버 필드에 대한 설명입니다.

속성 가치 기술
s_addr 서비스 포트 네트워크 바이트 순서의 32 비트 IP 주소입니다.

호스트

이 구조는 호스트와 관련된 정보를 유지하는 데 사용됩니다.

struct hostent {
   char *h_name; 
   char **h_aliases; 
   int h_addrtype;  
   int h_length;    
   char **h_addr_list
	
#define h_addr  h_addr_list[0]
};

다음은 멤버 필드에 대한 설명입니다.

속성 가치 기술
h_name ti.com 등 호스트의 공식 이름입니다. 예 : tutorialspoint.com, google.com 등
h_aliases TI 호스트 이름 별명의 목록을 보유합니다.
h_addrtype AF_INET 주소 계열을 포함하며 인터넷 기반 응용 프로그램의 경우 항상 AF_INET입니다.
h_length 4 인터넷 주소의 경우 4 인 IP 주소의 길이를 보유합니다.
h_addr_list in_addr 인터넷 주소의 경우 포인터 h_addr_list [0], h_addr_list [1] 등의 배열은 in_addr 구조를 가리 킵니다.

NOTE − h_addr은 하위 호환성을 유지하기 위해 h_addr_list [0]로 정의됩니다.

서번트

이 특정 구조는 서비스 및 관련 포트와 관련된 정보를 유지하는 데 사용됩니다.

struct servent {
   char  *s_name; 
   char  **s_aliases; 
   int   s_port;  
   char  *s_proto;
};

다음은 멤버 필드에 대한 설명입니다.

속성 가치 기술
s_name http 이것은 서비스의 공식 명칭입니다. 예 : SMTP, FTP POP3 등
s_aliases 별명 서비스 별명 목록을 보유합니다. 대부분의 경우이 값은 NULL로 설정됩니다.
스포츠 80 연결된 포트 번호가 있습니다. 예를 들어 HTTP의 경우 80이됩니다.
s_proto

TCP

UDP

사용되는 프로토콜로 설정됩니다. 인터넷 서비스는 TCP 또는 UDP를 사용하여 제공됩니다.

소켓 구조에 대한 팁

소켓 주소 구조는 모든 네트워크 프로그램의 필수 부분입니다. 우리는 그것들을 할당하고, 채우고, 그것들에 대한 포인터를 다양한 소켓 함수에 전달합니다. 때때로 우리는 이러한 구조 중 하나에 대한 포인터를 소켓 함수에 전달하고 내용을 채 웁니다.

우리는 항상 이러한 구조를 참조로 전달하고 (즉, 구조 자체가 아니라 구조에 대한 포인터를 전달) 항상 구조의 크기를 다른 인수로 전달합니다.

소켓 함수가 구조체를 채울 때 길이도 참조로 전달되므로 함수가 값을 업데이트 할 수 있습니다. 이를 가치-결과 인수라고합니다.

항상 bzero () 함수에 memset ()을 사용하여 구조 변수를 NULL (즉, '\ 0')으로 설정하십시오. 그렇지 않으면 구조에서 예기치 않은 정크 값을 얻을 수 있습니다.