raw socketを使ったメモ
- etherframeヘッダをつけずに送受信することもできる。受信するためには受信側のether I/Fをpromiscモードにすること。(送信側はpromiscにする必要無し)
-
- なお、小さなデータを送信したときの挙動はドライバに依ると考えられる。あるPCを使って小さなデータを送信したところ、一部が壊れたMACヘッダが自動的に補完されたデータが、対向で受信された。この挙動はそのPCでのみ確認しており、バグの可能性もある。
- raw readでは、1つのフレームを分割してreadすることは*できない*。readサイズが小さい場合、readされなかったデータは無視される。
-
- 例えば、4084byteのデータがwriteされたとして、4byteと4080byteを別々にreadすることはできない。先に4byteをreadすると、その後にreadを行ったとしても、残りの4080byteをreadすることはできない。
- 送信スレッドと受信スレッドの同時起動
-
- 受信スレッドがreadしている最中に送信スレッドがwriteできるか?=> できる。
- ただし、受信スレッドと送信スレッドで別ソケットを使っている場合、送信スレッドが送信したデータを受信スレッドがそのまま受信してしまう。受信スレッドと送信スレッドで同一の(一つの)ソケットを使っている場合は、受信スレッドは送信スレッドのデータを受信しない。