getsockopt()함수 사용예제
1. 인자는 소켓번호
2. 두 번째 인자는 SOL_SOCKET
3. SO_SNDBUF는 이름그대로 버퍼를 전송한다는 의미.
4.자료형은 int, 전송할 버퍼를 말한다.
5. 전송할 버퍼의 크기를 정한다. 자료형이 int라서 4byte가 되겠다.
unsigned uiTemp에 63*1024 집어넣어 버퍼의 크기를 변경하여 출력해봄.
최대 크기는 64이다. 64이상 되는 크기는 똑같은 바이트크기가 나온다. 최대 한계치가 존재하는 것이다. 여기서는 64가 제일 크다고
생각하면 되겠다. 그래서 63까지 변경이 가능한다. 아래는 실행결과.
아래 소스는 gethostbyname()함수이다.
메인함수의 인자로 실행방법을 정한다. 그러니까 실행시 ./파일명 인터넷.com등을 쳐야 해당 인터넷의 ip주소가
나오게끔 설정을 해놓았다.
구조체 변수 2개를 설정한다. 이것은 정해쳐 있는 구조체이므로 만들어서 사용하는 것이 아니다. 이미 정해져 있다.
gethostbynaem()함수의 인자로 main()함수의 인자를 넣는다. 여기서 argv[1]은 찾고자 하는 해당 인터넷이 되겠다.
이것을 반환한다. 구조체형 포인터를 반환하므로 myent또한 구조체형으로 선언되었다.
while문에서 괄호안에 조건을 보면 *myent->h_addr_list가 NULL이 아니면, 즉 밑에 소스를 해석해보면 알겠지만,
*myent->h_addr_lis가 가르키는 값, 즉 여기서는 해당 인터넷의 도메인 주소가 0이 아닐 때까지 실행한다.
add가 long int 형이므로 캐스팅를 한다.
그리고 myen.s_addr= *add; 구조체 멤버 어드레스에 add가 가르키고 있는 값을 넣는다.
이것을 아래 printf문에서 네트워크를 아스키로 바꿔주는 함수로 문자열을 출력한다.
그런다음, myent->h_addr_list++ 포인터형이라 *을 빼면 주소가 되므로 주소를 한 칸 이동시켜 그 다음에 있는 주소(도메인)을 가르킨다.
그래서 아래 그림에 도메인 주소가 출력된다.
'네트워크 > vmware 실습' 카테고리의 다른 글
7월 15일 패킷건져올리기 2 (0) | 2013.07.15 |
---|---|
7월 12일 소켓을 이용한 패킷 건져 올리기(정리 중) (2) | 2013.07.12 |
7월 11일 브로드캐스트 (정리 중) (0) | 2013.07.11 |
7월 10일 thread간에 연결하기(진행 중) (0) | 2013.07.10 |
7월 9일 서버와 클라이언트 thread 활용1 (0) | 2013.07.09 |