Linux ネットワークプログラミング

パケットな構造体の定義

プロトコルヘッダファイル
イーサネット/usr/include/linux/if_ethernet.h
IP/usr/include/netinet/ip.h
TCP/usr/include/netinet/tcp.h

listen() の backlog について

  • listen() の第二引数 backlog は、確立されたがプログラムに渡されていない(プログラムが accept() する前の)TCP コネクションの最大数を指している
    • Apache が重くて ACK しか返してない、といった動作の理由はコレか
  • 確立されていない TCP コネクションの最大数は、カーネルパラメータの tcp_max_syn_backlog にて設定

UDP/IP について

  • setsockopt() で SO_REUSEADDR を指定する場合、利用中のポートでも他のプログラムからバインドできてしまう
    • この場合、後にバインドしたプログラムにのみ、パケットが送られることとなる
  • UDP では送達保証がないため、sendto() はソケットディスクリプタの設定に依らずブロックされない