Part 1
요약·해설
Zephyr와 POSIX 실행 출력 32줄, descriptor pairing과 scheduling 차이를 보존합니다.
socketpair(2)
3 threads
Zephyr · POSIX
Part 2
접을 수 있는 영어 원문 전체
영어 원문 전체 펼치기
807B396372E451155E6331027610C94F195850D37DF24F4F978CF21B5D97F2D8
.. zephyr:code-sample:: sockets-socketpair
:name: Socketpair
:relevant-api: bsd_sockets
Implement communication between threads using socket pairs.
Overview
********
The sockets/socketpair sample application for Zephyr demonstrates a
multi-threaded application communicating over pairs of unnamed,
connected UNIX-domain sockets. The pairs of sockets are created with
socketpair(2), as you might have guessed. Such sockets are compatible
with the BSD Sockets API, and therefore the purpose of this sample
is also to reinforce that it is possible to develop a sockets
application portable to both POSIX and Zephyr.
The source code for this sample application can be found at:
:zephyr_file:`samples/net/sockets/socketpair`.
Requirements
************
None
Building and Running
********************
Build the Zephyr version of the sockets/echo application like this:
.. zephyr-app-commands::
:zephyr-app: samples/net/sockets/socketpair
:board: <board_to_use>
:goals: build
:compact:
After the sample starts, several client threads are spawned. Each client
thread sends a fixed number of messages to the server (main).
.. code-block:: console
*** Booting Zephyr OS build v3.3.0-rc1-97-g432ff20a72e1 ***
setting-up
Alpha: socketpair: 4 <=> 3
Bravo: socketpair: 6 <=> 5
Charlie: socketpair: 8 <=> 7
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
tearing-down
SUCCESS
Running application on POSIX Host
=================================
The same application source code can be built for a POSIX system, e.g.
Linux.
To build:
.. code-block:: console
$ make -f Makefile.host
To run:
.. code-block:: console
./socketpair_example
setting-up
Alpha: socketpair: 3 <=> 4
Bravo: socketpair: 5 <=> 6
Charlie: socketpair: 7 <=> 8
main: read 'Alpha' on fd 3
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
main: read 'Alpha' on fd 3
main: read 'Alpha' on fd 3
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
tearing-down
SUCCESS
As can be seen, the behavior of the application is approximately the same as
the Zephyr version.
Part 3
한국어 전문 번역
개요
Zephyr의 sockets/socketpair sample application은 이름이 없고 서로 연결된 UNIX-domain socket pair를 통해 통신하는 multi-threaded application을 보여 줍니다.
예상할 수 있듯이 socket pair는 socketpair(2)로 만듭니다. 이 socket은 BSD Sockets API와 호환되므로 이 sample은 POSIX와 Zephyr 양쪽에 이식 가능한 socket application을 개발할 수 있음을 다시 보여 줍니다.
이 sample application의 source code는 samples/net/sockets/socketpair에서 찾을 수 있습니다.
요구 사항
없음
빌드 및 실행
Zephyr version의 sockets/socketpair application은 다음과 같이 build합니다. 공식 원문은 설명 문장에서 sockets/echo라고 적지만 실제 build path는 sockets/socketpair입니다.
west build -b <board_to_use> samples/net/sockets/socketpair
Sample이 시작되면 여러 client thread를 생성합니다. 각 client thread는 server 역할을 하는 main thread에 정해진 수의 message를 보냅니다.
*** Booting Zephyr OS build v3.3.0-rc1-97-g432ff20a72e1 ***
setting-up
Alpha: socketpair: 4 <=> 3
Bravo: socketpair: 6 <=> 5
Charlie: socketpair: 8 <=> 7
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
main: read 'Alpha' on fd 4
main: read 'Bravo' on fd 6
main: read 'Charlie' on fd 8
tearing-down
SUCCESS
POSIX Host에서 application 실행
동일한 application source code를 Linux 같은 POSIX system용으로 build할 수 있습니다.
Build 방법:
$ make -f Makefile.host
실행 방법:
./socketpair_example
setting-up
Alpha: socketpair: 3 <=> 4
Bravo: socketpair: 5 <=> 6
Charlie: socketpair: 7 <=> 8
main: read 'Alpha' on fd 3
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
main: read 'Alpha' on fd 3
main: read 'Alpha' on fd 3
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
main: read 'Bravo' on fd 5
main: read 'Charlie' on fd 7
tearing-down
SUCCESS
출력에서 볼 수 있듯이 application 동작은 Zephyr version과 거의 같습니다. Thread scheduling에 따라 message가 관찰되는 순서는 조금 달라질 수 있지만 각 client가 main에 고정된 수의 message를 보내고 성공적으로 종료하는 흐름은 같습니다.
Source
출처
영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.