最後の関門は、サーバ実装のacceptだった。どうやってもerrno=11のリソースがうんたらかんたらとエラーを吐く。
おかしい動作として、通常acceptは接続があるまで待つ。これをブロッキングと呼ぶ。それをしない。今回は、1対1接続まで出来ればいいので、ブロッキングで要件は十分である。
で、それが理由だった。
socketの作成の仕方が、net_Socket()関数だったのだが、これの中でノンブロッキングモードにしていた。VLCの場合、socketは全てノンブロッキングモードで作成しているので、当然のことだった。これを直接socketに入れることにより、ブロッキングモードに入ることが出来るようになった。
で、
動いた。
VLCのサーバ側とクライアント側をローカルで起動して、アクセスできた。wireshark(旧ethereal)でパケット見れた。
下のレイヤをちょこちょこ切り替えただけで、上位のストリームの繋ぎの部分とかは触っていない。触ったのは下位のAPIに関係あるとこだけ。そんだけで勝手にストリームが流れてくれた。かなり嬉しい。
中身が、RTPじゃないのでwiresharkで解析してくれない。次は中身をRTPにする作業でもしようか。
てか、DCCPで映像伝送マンセーとか言っておきながらフリーの実装用意してないってどういうことよ。DCCPをLinux実装で映像伝送しましたーってネタだけで、もう一本論文書けるぞ。