前書き
基本ネットや書籍から拾ってきた内容を雑にメモしているだけ
文面以上に内容をもっと深堀りたかったら、リンク貼るのでそこを見てください
ちなみにITインフラ技術の実験室ってサイトが良すぎたので何かあったら基本的にそこに全部載ってる
用語
ファイル
ファイルはインターフェイスです
ファイルインターフェイスが実装されたオブジェクトを操作すると、ローカルの補助記憶装置に対して読み書きできたり、通信相手と送受信できたりします。
- 補助記憶装置に対して読み書きするファイル[クラス|オブジェクト]は単純にファイルと呼ぶ
- プロセス間通信やtcp/udp等を利用する際に利用するファイル[クラス|オブジェクト]はソケットファイルと呼ぶ
記述子 (descriptor
識別子は識別する為のもの。
記述子は記述する為のもの。記述するためには識別したり、読み込んだりする必要もある。
なので、記述子は識別子よりも強力。
記述子は基本的に特定の関数やクラス等で引数として与え、その関数やクラスを利用して読み書きができるようになる。
Kernelレベルで実装されているらしい。
記述子には
- socket descriptor
- socket file descriptor
- file descriptor
- field descriptor
等、その他沢山ある。 (発案の数だけある
参考資料:
https://unix.stackexchange.com/questions/233237/etymology-of-descriptor-in-file-descriptor/295746#295746
https://rust-jp.slack.com/archives/C8FLSR5F1/p1571635210176900
Cでソケットを扱う際の各種関数等の仕様
この内容の軽いメモ
https://www.infra.jp/programming/network_programming_3.html#multiplexing
accept
待機待ち行列があれば、そこから1つ取り出す。
なければ、ブロッキングする。
select
引用: https://www.infra.jp/programming/network_programming_3.html#multiplexing
select()はaccept()やrecv()同様、処理をブロックしますが、複数のディスクリプタを同時に見張ることができるため、クライアントからの新規接続や接続中クライアントからの受信など、記述子の変化があった場合にどのような変化かに関わらず処理を先に進められます。
また、各ディスクリプタに変化があるまでブロックするため、CPUパワーを無駄に消費することもありません。
poll
selectより細かく指定できる
EPOLL
数千コネクションでも耐えられる様にチューニングされている。
pollの上位互換だが、linux固有の実装らしい
Cでネットワーキングプログラミングをする
...今時間が無いため後で書く