네트워크/vmware 실습

7월 8일 파일소켓으로 ptread

송시혁 2013. 7. 8. 16:15

위의 define문을 보면FILE_SOCKET이 "../SMART_SCOKET"정의 되어 있다.


unlink()함수에서 인자로 define한 값을 받는다. UNLINK는 define한 이름의 파일을 지우는 역할인데 여기서 호출한 이유는 혹시나 같은 이름의 

파일이 있을지 모르니 호출하였다.


소켓함수의 AF_UNIX가 인자로 사용되었다. 이부분 보류 잘모름. OTL.....


struct sockaddr_un부분을 본다.



#define __SOCKADDR_COMMON(sa_prefix) sa_family_t sa_prefix##family

sa_prefix <= sun_

sa_family_t sa_prefix sun_family

 #define __SOCKADDR_COMMON_SIZE  (sizeof (unsigned short int))

이 define에서 __SOCKADDR_COMMON_SIZE 이 sizeof로 unsigned short int크기로 define.


struct sockaddr_un
{
  
  _SOCKADDR_COMMON (sun_));=>여기 이부분은  sa_family_t sun_family;이 된다.
  char sun_path[108];
  
};
그래서 결국 아래와 같은 구조체가 된다.
struct sockaddr_un
{
  sa_family_t sun_family;
  char sun_path[108];//길이를 
  
};
typedef unsigned short int sa_family_t;

21번라인에서 stSAddr.sun_family = AF_UIX;가 된다.

strcpy(stSAddr, FILE_SOCKET)-> FILE_SOCKET을 stSAddr로 복사한다.

iStructSize=sizeof(struct sockAddr_un)=iStructSize에 구조체 크기를 설정한다.


while문 내부

변수 선언 가능한다. 중괄호 내에서만 실행가능한 변수이다.


다음 명령을 친다. 그 이유는 AF_UNIX 실행파일을 VMWARE에서 실행할 수 없기 때문에

리눅스 공유폴더 밖에서 실행해야 한다. 실행파일을 그래서 리눅스공유폴더보다 상위폴더에로 가져와서 실행해야 한다.



home디렉토리에서 SMART.SOCKET=이 생성되어 있는 것이 보인다.


클라이언트





여기 소스에서 잘못된부분이 있는데 close(iCSock);를 return 0;전에 삽입하여야 한다. 지금 이소스대로 하면, 메시지를 한 번 전송하고

클라이언트가 꺼져 버린다. 그렇기 때문에 반드시 return 전에 사용하여야 한다.