블로그 이미지
송시혁

calendar

1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive

2013. 7. 4. 16:22 네트워크/vmware 실습








fcntl()함수


이 함수를 이용하여 블로킹을 논 블로킹으로 만들 수 있다.

소켓에 들어오는 정보를 알수 있다.






어제 만든 udp서버 소스에서 아래 fcntl함수를 추가하였다.

첫번째 fcntl)함수에서 소켓에 getpid()함수를 써서 현재 프로세서ID가 무엇인지 알 수 있다. 





UseIdelTime();함수를 호출하면 sleep(3)함수에 의해 2초 마다 '.'을 찍어낸다. 서버에 아무런 정보도 들어오지 않을 때는 이 점만찍어낸다. 



다음은 핸들러 함수 부분. 





























멀티태스킹


pid_t는 int형이다. typedef에 의해서 pid_t는 int형이다.

uiMomid를 선언한다. 그이유는 부모 프로세서를 알기위해서 변수를 선언하여  getpid()함수를 사용하여 부모의 프로세서가 뭔지 

알게 한다.




while문안에서 if문에서 getpid()함수와 uiMomid와 비교하여 같으면 if문을 실행한다.

accpet()함수는 랑데뷰 소켓을 생성한다. 그와 동시에 클라이언트 소켓을 생성한다.

fork();함수가 호출되면, 프로세서를 둘로 나눈다? 부모 프로세서와 차일드(child)자식 프로세서로 나눈다.

그리고 다시 if문안에 if문 else문에서 close()함수를 쓰는데 하나는 랑데뷰, 하나는 클라이언트를 닫아야한다.

자식 프로세서가 랑데뷰를 쓰지 않으므로 닫아야 한다. 반대로 부모프로세서는 accept()함수가 생성한 클라이언터 sock을 닫아야 한다.

그래서 getpid()함수와 uiMomid변수를 비교하여 조건식으로 써서 구성하였다. 그리고 큰 else문은 프로세스를 처리하는 부분이라고 생각하면 된다.

실제로 클라이언트와 메신저를 보내고 받을 수 있는 것이다. 지난, 시간에 배웠으므로 자세한 설명은 생략.



실행결과






'네트워크 > vmware 실습' 카테고리의 다른 글

7월 5일 thread()함수를 이용한 소스  (0) 2013.07.05
7월 5일 thread()개념  (2) 2013.07.05
7월 3일 비동기식 udp(정리중)  (0) 2013.07.03
7월 2일 signal 신호  (0) 2013.07.02
7월 1일 zterm 3handshake개념  (1) 2013.07.01
posted by 송시혁