Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

network model #50

Open
tgparkk opened this issue Dec 13, 2024 · 5 comments
Open

network model #50

tgparkk opened this issue Dec 13, 2024 · 5 comments

Comments

@tgparkk
Copy link
Owner

tgparkk commented Dec 13, 2024

No description provided.

@tgparkk
Copy link
Owner Author

tgparkk commented Dec 13, 2024

tcp
clinet
638697144736204022

server
tcp의 큰 특징은 바운더리 개념이 없어 this_thread::sleep_for(1s); 와 같은 코드 넣지 않으면 SendBuffer 가 준비되면 송신

638697144906344458

this_thread::sleep_for(1s); 을 넣음으로서 clinet 에서 보낸 100 * 10 만큼 server 쪽에서 받음
server 쪽에서는 항상 100byte 를 받는다는 보장이 없음
638697145358244057

@tgparkk
Copy link
Owner Author

tgparkk commented Dec 13, 2024

udp
clinet
638697145539729040

server
638697145622348747

@tgparkk
Copy link
Owner Author

tgparkk commented Dec 13, 2024

select model

// Select 모델 = (select 함수가 핵심이 되는)
// 소켓 함수 호출이 성공할 시점을 미리 알 수 있다!
// 문제 상황)
// 수신버퍼에 데이터가 없는데, read 한다거나!
// 송신버퍼가 꽉 찼는데, write 한다거나!
// - 블로킹 소켓 : 조건이 만족되지 않아서 블로킹되는 상황 예방
// - 논블로킹 소켓 : 조건이 만족되지 않아서 불필요하게 반복 체크하는 상황을 예방

// socket set
// 1) 읽기[ 2 ] 쓰기[ ] 예외(OOB)[ ] 관찰 대상 등록
// OutOfBand는 send() 마지막 인자 MSG_OOB로 보내는 특별한 데이터
// 받는 쪽에서도 recv OOB 세팅을 해야 읽을 수 있음
// 2) select(readSet, writeSet, exceptSet); -> 관찰 시작
// 3) 적어도 하나의 소켓이 준비되면 리턴 -> 낙오자는 알아서 제거됨
// 4) 남은 소켓 체크해서 진행

// fd_set set;
// FD_ZERO : 비운다
// ex) FD_ZERO(set);
// FD_SET : 소켓 s를 넣는다
// ex) FD_SET(s, &set);
// FD_CLR : 소켓 s를 제거
// ex) FD_CLR(s, &set);
// FD_ISSET : 소켓 s가 set에 들어있으면 0이 아닌 값을 리턴한다

638697146415301480
image

@tgparkk
Copy link
Owner Author

tgparkk commented Dec 13, 2024

socket option
638697146697322557

@tgparkk
Copy link
Owner Author

tgparkk commented Dec 13, 2024

non-blocking socket
clinet
638697146697322557
server
638697147253676572

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant