asio

Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 라인 기반 작업

라인 기반 작업 (Line-Based Operations) 일반적으로 사용되는 많은 인터넷 프로토콜은 라인 기반이며, 이는 문자 시퀀스 "\r\n"로 구분되는 프로토콜 요소를 가지고 있다는 것을 의미한다. 예로 HTTP, SMTP 그리고 FTP 등이 있다. 구분 기호를 사용하는 다른 프로토콜뿐만 아니라 라인 기반 프로토콜의 구현을 보다 쉽게 접근하기 위해서, Boost.Asio는 read_until()와 async_read_until() 함수를 포함하고 있다. 다음 예제는 클라이언트의 HTTP 요청의 첫 번째 라인을 수신하는 위해 HTTP 서버에서 async_read_until()을 사용하는 방법을 보여준다: class http_connection { ... void start() { boost::asi..

Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - Reactor 스타일 작업

Reactor 스타일 작업 (Reactor-Style Operations) 때때로 프로그램은 I/O 작업 자체를 수행하려는 타사 라이브러리와 통합되어야 한다. 이를 용이하게 하기 위해 Boost.Asio는 소켓을 읽기 준비, 쓰기 준비 또는 보류 중인 오류 조건을 대기하는 데 사용할 수 있는 동기식 및 비동기식 작업을 포함하고 있다. 예를 들어, 넌-블럭킹 읽기를 수행하려면 다음과 같이 사용할 수 있다: ip::tcp::socket socket(my_io_context); ... socket.non_blocking(true); ... socket.async_wait(ip::tcp::socket::wait_read, read_handler); ... void read_handler(boost::system..

Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 스트림, 짧은 읽기와 짧은 쓰기

스트림 짧은 읽기와 짧은 쓰기 (Streams, Short Reads and Short Writes) Boost.Asio의 많은 I/O 개체는 스트림 지향적(stream-oriented)이다. 이는 다음을 의미한다: 메시지 경계가 없다. 전송되는 데이터는 바이트의 연속된 순서다. 읽기나 쓰기 작업은 요청된 바이트 수보다 적은 바이트 수를 전송할 수 있다. 이를 짧은 읽기 또는 짧은 쓰기라고 한다. 스트림 지향 I/O 모델을 제공하는 객체는 다음 유형 요건 중 하나 이상을 제공한다: SyncReadStream, 여기서 read_some()이라는 멤버 함수를 사용하여 동기식 읽기 작업을 수행한다. AsyncReadStream, 여기서 async_read_some()이라는 멤버 함수를 사용하여 비동기식 읽기 ..

Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 버퍼

버퍼 (Buffers) 기본적으로, I/O는 버퍼라고 불리는 메모리 인접 영역과 데이터를 주고받는 것을 포함한다. 이러한 버퍼는 포인터와 크기(바이트)로 구성된 튜플로 단순하게 표현할 수 있다. 효율적인 네트워크 응용프로그램을 개발을 허용하기 위해 Boost.Asio는 Scatter-Gather(분산-수집) 작업의 지원을 포함한다. 이러한 작업은 하나 이상의 버퍼를 포함한다: Scatter 읽기는 데이터를 여러 버퍼로 수신한다. Gather 쓰기는 여러 버퍼를 전송한다. ※ Scatter-Gather는 분산-수집으로 번역이 가능하지만, 글의 전체적인 이해를 위해 영문 그대로 사용한다. 그러므로 버퍼 컬렉션을 표현하려면 추상화가 필요하다. Boost.Asio에서 사용되는 접근 방식은 단일 버퍼를 나타내는 ..

Boost C++ Libraries/Boost.Asio

Boost.Asio 개요 - 핵심 개념 및 기능 - 스트랜드: 명시적 잠금없이 스레드 사용

스트랜드: 명시적 잠금 없이 스레드 사용 (Strands: Use Threads Without Explicit Locking) 스트랜드(strand)는 이벤트 핸들러의 엄격한 순차 호출(즉, 동시 호출 없음)로 정의된다. 스트랜드(strands)를 사용하면 멀티스레드 프로그램에서 명시적 잠금(예:뮤텍스 사용)없이 코드를 실행할 수 있다. 스트랜드(strands)는 다음 선택 가능한 방식에서 설명하는 것처럼 암시적이나 명시적일 수 있다: 하나의 스레드에서만 io_context::run()을 호출하면 모든 이벤트 핸들러가 암시적으로 스트랜드(strand)에서 실행되는 것을 의미한다. 핸들러가 run() 내부에서만 호출된다는 io_context의 보장 때문이다. 연결과 관련된 비동기식 작업용 단일 체인이 있는..

까마귀75
'asio' 태그의 글 목록 (409 Page)