티스토리 뷰


10번줄 

Fcntl(file control) 시스템콜

F_GETFL(GET Flag) :  그 소켓에 대해 이전에 플래그가 설정되어 있으면 그것을 얻어와라 라는의미


11번줄 

O_NONBLOCK(Option nonblock)

즉 기존에 있던 flag를 int형 숫자로 리턴하게끔해서 거기에 nonblock옵션을 새로 추가하게 하기 위한 줄이다.


stdineof는 키보드로부터 Ctrl+D가 눌렸는지에 대한 플래그이다.


우리 케이스에선 10,12,14번줄 필요하지 않다. 통상적으로 복잡한 프로그램에 쓰기 때문에 썼음.

파일을 nonblock하게끔 설정하는것이 file control == Fcntl시스템콜이다.


select 했을때 nonblock 된다. readable 또는 writable한 일이 없는 경우 블럭 되지 않고 즉시 -1리턴 된다.

23번줄 

키보드로부터 컨트롤d가 입력되지 않고, 키보드로부터 읽을 공간이 남아있는경우

25번줄

소켓으로부터 읽을수 있는경우

27번줄

to버퍼에 소켓에 write할 데이터가 남아있는 경우

29번줄

fr버퍼에 모니터로 write할 데이터가 남아있는 경우

nonblock으로 설정 되어 있어서 select 는 첫 반복문에서 바로 리턴될것이다. 아무것도 쓰거나 읽지를 않았으므로

33번줄 : to버퍼의 시작주소를 넘겼음(to==toiptr임) 최대 &to[MAXLINE] - toiptr만큼 키보드로부터 읽는다.

36번줄

키보드로 부터 컨트롤디가 입력 된 경우임.

 stdineof 라는 플래그를 1로 설정하고 tooptr == toiptr to버퍼에 소켓에 쓸 데이터가 없는 경우 서버에 FIN메세지를 보냄(shutdown)


(중요) 45번줄에서 왜 FD_SET(sockfd,&wset); 을할까?





댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함