소켓 통신에 대해 공부를 하고 windows환경에서 개발을 하려고 보니 리눅스 소켓과 윈도우 소켓은 많이 다르다는 것을 알게 되었다.그중 하나가 리눅스에서 멀티플렉싱(Multiplexing)을 위해 사용하던 select를 윈도우에서 그대로 사용할 수 없다는 것이다. Multiplexing하나의 프로세스가 하나의 전송로를 사용해서 여러 사용자들과 통신하여 효율성을 높이는 기술 리눅스에서는 멀티플렉싱을 구현하기 위해 select 함수를 사용하였다. int select(int nfds, // 최대 소켓 번호+1fd_set* read_fds, // 읽기를 감지할 fdsfd_set* write_fds, // 쓰기를 감지할 fdsfd_set* error_fds, // 예외를 감지할 fdsstruct timeval*..
소켓으로 통신을 하다가 통신을 끝내고 싶을 때 소켓을 종료해야한다.소켓을 종료하는 방법은 두가지가 있는데 int close(int socket_fd);int shutdown(int socket_fd, int how_to); 이 있다. 위 두가지 함수의 사용법과 차이점에 대해 알아보자 TCP소켓은 통신의 신뢰성을 유지하기 위해 패킷을 주고받을 때 마다 안전하게 수신했다는 신호로 ACK패킷을 재전송한다. 이는 소켓을 종료할 때도 마찬가지이며 클라이언트에서 종료 패킷을 보내면 서버는 이에 따른 ACK패킷과 종료 패킷을 보낸다. 서버가 보낸 종료 패킷에 대해 클라이언트도 ACK패킷을 전송하면 정상적으로 소켓이 종료된다. close() int close(int socket_fd); 성공하면 0을, 실패하면 -1을..
서버가 여러 클라이언트를 처리하기 위한 방법 중 입출력 다중화를 사용하는 방법을 알아보자.입출력 다중화란 여러 입출력 대상이 있을 때 그 대상들을 검사하며 입출력이 필요할 때마다 작업을 수행하는 것을 말한다. 이 방법은 멀티 프로세싱, 멀티 스레딩 방법과 다르게 싱글 프로세스, 싱글 스레드에서도 동작한다. 하지만 완전히 동시에 처리하지는 못하는 단점을 가지고 있다. select() 함수리눅스는 select() 함수로 입출력 다중화를 구현할 수 있다. select()는 지정한 범위의 file discripter중 FD_SET으로 1로 set되어있는 파일을 순회하면서 변화가 있는 file discripter를 반환한다.파일에 변화가 있다면 그대로 1로 두고, 변화가 없다면 0으로 set멀티 플랙싱이 가능하게..
- Total
- Today
- Yesterday
- C/C++
- database
- 국내여행
- 운영체제
- SOCKET
- OS
- Spring
- winsock
- rxswift
- Java
- Git
- scala
- C++
- SwiftUI
- ue4
- 드라마
- SHADER
- mongoDB
- ios
- DesignPattern
- 수학
- C
- 데이터베이스
- game
- swift
- machine learing
- Cocos2d-x
- JSP
- 알고리즘
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |