BOOST 라이브러리에서 select나 epoll 역할을 하는 것을 찾습니다.

hssoft의 이미지

C로 된 기존 서버프로그램을
BOOST를 이용한 C++로 옮기고 있습니다.

기존 시스템이 socket과 fifo등을 select와 FD_ISSET으로 읽어왔었는데요

BOOST에서 timed_recv가 같은 역할을 할 수 있을까요?

레퍼런스 읽어봐도 정확히 매칭되는지 감이 안와 질문올립니다.

empty2fill의 이미지

소켓 라이브러리를 찾으시는 건가요?

boost 라이브러리는 추상화 수준이 높아서

select, epoll 수준의 fd를 조작하는 api(wrapper)는 없을 것 같네요.

대신 boost asio에서 select나 epoll에 대한 추상화된 인터페이스로 io_service와 async_* 인터페이스를 제공합니다.

http://www.boost.org/doc/libs/release/doc/html/boost_asio.html

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -

hssoft의 이미지

답변감사드립니다.
하나 더 질문드리면
socket뿐만 아니라
실제 BOOST를 사용한 IPC 를 구현할때도 asio를 사용하는지 궁금합니다.
boost::interprocess 가 있지만 기존 C소스로 구현된 fd_set을 이용한 select로 fifo를 catch해내던 방법과 많이 달라보여서요

empty2fill의 이미지

UNIX Domain Sockets이 fifo 맞나요?

asio 문서에서

Overview - POSIX-Specific Functionality - UNIX Domain Sockets

여기에 UNIX Domain Sockets에 대한 설명이 나와있습니다.

http://www.boost.org/doc/libs/1_46_1/doc/html/boost_asio/overview/posix/local.html

서버 사용 예

::unlink("/tmp/foobar"); // Remove previous binding.
local::stream_protocol::endpoint ep("/tmp/foobar");
local::stream_protocol::acceptor acceptor(my_io_service, ep);
local::stream_protocol::socket socket(my_io_service);
acceptor.accept(socket);

클라이언트 사용 예

local::stream_protocol::endpoint ep("/tmp/foobar");
local::stream_protocol::socket socket(my_io_service);
socket.connect(ep);

이렇게 endpoint를 만들때 path("/tmp/foobar")를 넣어줘서 소켓 바인딩(?)하여 사용 합니다.

——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -