| 22 | | |
| 23 | | * [http://cboard.cprogramming.com/networking-device-communication/93683-checking-if-file-descriptor-valid.html#post678998 Checking if a file descriptor is valid] |
| 24 | | > {{{#!c |
| 25 | | > int is_valid_fd(int fd) |
| 26 | | > { |
| 27 | | > return fcntl(fd, F_GETFL) != -1 || errno != EBADF; |
| 28 | | > } |
| 29 | | > }}} |
| 30 | | |
| 31 | | * [http://www.linuxquestions.org/questions/programming-9/sockets-af_packet-versus-pf_packet-942143/ sockets: AF_PACKET versus PF_PACKET] |
| 32 | | > Yes. AF_foo means address family foo, and PF_foo means protocol family foo. In Linux, they are always been the same values, I believe. |
| 33 | | > Traditionally, the PF_foo constants were used for socket(), but AF_foo in the struct sockaddr structure. |
| 34 | | > |
| 35 | | > Thus, today, there really should be no difference between AF_foo and PF_foo. |
| 36 | | |
| 37 | | * [http://d.hatena.ne.jp/enakai00/20120522/1337650181 PF_PACKETの仕組み - めもめも] |
| 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になったことでわかる。 |
| | 74 | |
| | 75 | = System Programming = |
| | 76 | |
| | 77 | * [http://cboard.cprogramming.com/networking-device-communication/93683-checking-if-file-descriptor-valid.html#post678998 Checking if a file descriptor is valid] |
| | 78 | > {{{#!c |
| | 79 | > int is_valid_fd(int fd) |
| | 80 | > { |
| | 81 | > return fcntl(fd, F_GETFL) != -1 || errno != EBADF; |
| | 82 | > } |
| | 83 | > }}} |
| | 84 | |
| | 85 | * [http://www.linuxquestions.org/questions/programming-9/sockets-af_packet-versus-pf_packet-942143/ sockets: AF_PACKET versus PF_PACKET] |
| | 86 | > Yes. AF_foo means address family foo, and PF_foo means protocol family foo. In Linux, they are always been the same values, I believe. |
| | 87 | > Traditionally, the PF_foo constants were used for socket(), but AF_foo in the struct sockaddr structure. |
| | 88 | > |
| | 89 | > Thus, today, there really should be no difference between AF_foo and PF_foo. |
| | 90 | |
| | 91 | * [http://d.hatena.ne.jp/enakai00/20120522/1337650181 PF_PACKETの仕組み - めもめも] |
| | 92 | > Socketをオープンする際のお作法(呪文?)は次のとおりで、通常は、第一引数に「PF_INET」(もしくはAF_INET)を指定します。 |
| | 93 | > {{{ |
| | 94 | > sock = socket(PF_INET, SOCK_STREAM, htons(ETH_P_IP)); |
| | 95 | > }}} |
| | 96 | > ここに「PF_PACKET」を指定することで、受信直後の生パケットをユーザ空間のアプリケーションで受け取ることができるようになります。これは、パケットのコピーを受け取っているだけなので、このパケットを受け取るべき本来のアプリケーションにもちゃんと同じパケットは届きます。 |
| | 97 | |
| | 98 | * [http://togetter.com/li/283316 TCP socketではwriteの後すぐにcloseしてはいけない - Togetter] |
| | 99 | > TCP socketではwriteの後すぐにcloseしてはいけない。 |
| | 100 | > 相手側に全てのデータが届いてからcloseする必要がある。 |
| | 101 | > shutdown で書き込み側だけハーフクローズするとよい。 |
| | 102 | > 相手側がcloseしてから、こちらをcloseする。相手側がcloseしたことは、readを呼んでブロックさせておくと、読み込みバイト数==0 つまりEOFになったことでわかる。 |