| 38 | > Socketをオープンする際のお作法(呪文?)は次のとおりで、通常は、第一引数に「PF_INET」(もしくはAF_INET)を指定します。 |
| 39 | > {{{ |
| 40 | > sock = socket(PF_INET, SOCK_STREAM, htons(ETH_P_IP)); |
| 41 | > }}} |
| 42 | > ここに「PF_PACKET」を指定することで、受信直後の生パケットをユーザ空間のアプリケーションで受け取ることができるようになります。これは、パケットのコピーを受け取っているだけなので、このパケットを受け取るべき本来のアプリケーションにもちゃんと同じパケットは届きます。 |
| 43 | |
| 44 | * [http://togetter.com/li/283316 TCP socketではwriteの後すぐにcloseしてはいけない - Togetter] |
| 45 | > TCP socketではwriteの後すぐにcloseしてはいけない。 |
| 46 | > 相手側に全てのデータが届いてからcloseする必要がある。 |
| 47 | > shutdown で書き込み側だけハーフクローズするとよい。 |
| 48 | > 相手側がcloseしてから、こちらをcloseする。相手側がcloseしたことは、readを呼んでブロックさせておくと、読み込みバイト数==0 つまりEOFになったことでわかる。 |