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になったことでわかる。 |