문제 상황 ) 수신 버퍼에 데이터가 없는데, **read** 송신 버퍼가 꽉 찼는데, **write** Select 모델(selec함수가 핵심) 소켓 함수 호출이 성공할 시점을 미리 알 수 있다. 블로킹 소켓 : 조건이 만족되지 않아서 블로킹되는 상황 예방 논 블로킹 소켓 : 조건이 만족되지 않아서 불필요하게 반복 체크하는 상황을 예방 실행 순서 읽기[ ] 쓰기[ ] 예외(00B)[ ] 관찰 대상 등록 단) OutOfBrand는 send() 마지막 인자 MSG_OOB로 보내는 특별한 데이터 받는 쪽에서도 recv 00B 세팅을 해야 읽을 수 있음. select(readSet, writeSet, exceptSet); -> 관찰 시작 적어도 하나의 소켓이 준비되면 리턴 -> 낙오자는 알아서 제거됨 남은 소켓..
책 ) TCP/IP 윈도우 소켓 프로그래밍 지금까지 공부했던 서버는 두가지의 서버로 분류 할 수 있다. 반복서버(iterative server) 여러 클라이언트를 한번에 하나씩 처리한다. 단일 스레드로 구현하며, 시스템 자원소모가 적다. 하지만 한 클라이언트의 처리 시간이 길어지면 다른 클라이언트의 대기시간이 길어진다. (UDP 서버를 작성할때 적합) 병행 서버(concurrent server) 여러 클라이언트를 동시에 처리한다. 멀티스레드 서버가 해당되고, 한 클라이언트의 처리 시간이 길어지더라도 다른 클라이언트에 영향을 주지 않는다. 다만 스레드를 여러 개 생성하여 구현하므로 시스템 자원 소모가 많다. 이상적인 소켓 입출력 모델의 특징 가능한 많은 클라이언트가 접속할 수 있다. 서버는 각 클라이언트의..
여태껏 만들던 서버는 동기 형식의 서버로써, accept() | connect() | send() | recv() | sendto() | recvfrom() 함수 모두 호출 시 조건이 만족될 때 까지 무한정 대기하는 형식을 취합니다. 따라서 조건이 맞지 않으면 다른 행동을 할 수 없습니다. 그렇다면, 비동기 형식은 무엇이냐? 비동기 형식은 소켓 함수 호출 시 조건이 만족되지 않더라도 함수가 리턴을 하므로 중단 없이 다음 코드를 수행할 수 있습니다. 다만 조건이 만족되지 않아서 리턴하게 되면 WSAEWOULDBLOCK코드를 리턴합니다. 따라서 WSAGetLastError()를 통해서 확인을 해야 합니다. 호출 방식은 아래와 같습니다. 전체적인 예제도 참고해서 봐주시면 감사하겠습니다. Client는 기본 세..
- Total
- Today
- Yesterday
- 자료구조
- c++
- 학교
- STL
- 스레드풀
- BFS
- 야경
- 멀티쓰레드
- Select모델
- 고양이
- 컨퍼런스
- 레지스터
- queue
- 정보보안
- 워셜알고리즘
- 개발
- 드림핵
- 더블버퍼링
- Dreamhack
- 시스템보안
- 알고리즘
- 백준
- 인제대학교
- 링크드 리스트
- 보안
- 지뢰찾기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |