유닉스 소켓-구조
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')으로 설정하십시오. 그렇지 않으면 구조에서 예기치 않은 정크 값을 얻을 수 있습니다.