Hatena::Groupcside

Cside::StudyMemo このページをアンテナに追加 RSSフィード

メインブログに書くまでもない自分用メモを垂れ流す。日々是勉強也。

カテゴリー

2012-09-10

[]ソケット通信メモ

例解UNIXプログラミング教室

例解UNIXプログラミング教室

TCP/IP

  • TCP/IP - インターネットおよび大多数の商用ネットワークで稼動するプロトコル一式
    • IP (Internet Protcol) - TCP/IP の要となるプロトコル
    • TCP (Transmission Control Protocol) - 電子メールや WWW *1 などのために使われているプロトコル。
    • IP を用いて実現されている。
TCP
  • 信頼性のある接続型の通信プロトコル
    • 接続型通信では、 (1) connection を確立 (2) データの送受信 (3) 最後に通信路を切る という手順を取る。
    • TCP で送受信されるデータは紛失したり重複したり順序が入れ替わることはない

ソケット

  • プロセス間通信をするためのインターフェイス
    • 通信をするためにプロセスにつける部品だと思えばいい
  • ファイル入出力と同じように、ソケットは記述子によって指定される(ソケット記述子)
    • この記述子を用いてソケットに書くと他のプロセスにデータが送られ、そこから読むと他のプロセスからのデータを受け取れる
ソケットの通信領域

ソケット関数はプロセスに新たなソケットを1つ作る。socket 関数はソケット奇術師を返す。

#include <sys/sochet.h>
int socket(int domain, int type, int protocol);
domain そのソケットが作られる通信領域
type ソケットの型。SOCK_STREAM(信頼性のある接続型の通信)や SOCK_DGRAM(信頼性のない非接続型の通信)がよく指定される)
protocol通信プロトコルの番号(通常は0を指定)
通信領域

通常以下の3つのいずれかを指定

定数
INET 領域AF_INETIPv4 を基にした TCP/IP で通信するソケットのための通信領域。
INET6 領域AF_INET6IPv6 を基にした TCP/IP で通信するソケットのための通信領域。
UNIX 領域AF_UNIX同一コンピュータ内のプロセス間通信で使う通信領域。

その他

  • Perl ライブラリなら IO::Socket::INET が無難
    • 参考
      • Test::TCP
      • Server::Starter
      • Clutch::Worker
      • Mojo::IOLoop(Server|Client)
      • Starlet::Server
  • blocking/nonblocking
    • あとで

*1:URI + HTTP + HTML の3標準規格で構成されるハイパーテキストシステム。== HTTP ではないことに注意