揮発性のメモ2

http://d.hatena.ne.jp/iww/

UNIXドメインソケットでデータグラム

UNIXドメインソケットでデータグラムを使うと、UDPの欠点が全く表に出てこないので便利。

  • データが送信単位で分割される
  • データがなくならない
  • データの順番は狂わない
  • 接続先がいないときはちゃんと接続エラーになる

UDSに対してもSO_RCVBUF*1SO_RCVTIMEOはちゃんと使えるので、思ってる以上に適当に利用できる。

UDSデータグラムサーバ

    int sd,len;
    unsigned char data[256];
    struct sockaddr_un addr = {
        .sun_path = "/tmp/HOGE",
        .sun_family = AF_UNIX,
    };

    /* サーバ部分 */
    sd = socket( AF_UNIX, SOCK_DGRAM, 0 );
    unlink(addr.sun_path);
    bind( sd, (struct sockaddr *)&addr, sizeof(addr) );

    while( (len=read(sd,data,sizeof(data))) > 0 ){
        printf("recv:%.*s\n",len,data);
    }

UDSデータグラムクライアント

    /* クライアント部分 */
    sd = socket( AF_UNIX, SOCK_DGRAM, 0 );
    sendto( sd, "Hello,world!", 12, 0, (struct sockaddr *)&addr, sizeof(addr) );
    sendto( sd, "Hello,world!", 12, 0, (struct sockaddr *)&addr, sizeof(addr) );
    sendto( sd, "Hello,world!", 12, 0, (struct sockaddr *)&addr, sizeof(addr) );

*1:使えなかった