第十二回スパルタンプログラム
何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと
30分悩んで分からなかったら、早めにヘルプを出す。
やりたいこと
スレッドの勉強とかなんやらで知識がたまったので、プログラムをこりこり書く!
ブレークダウン(思考のダンプ)
- listen portは一つなので、メインでとりま動作させる。
- threadで複数コネクションを扱うようにする。
- コネクションのハンドリング関数をthreadに渡す。
- threadを複数走らせるようにするのは後からでもよさそうなので、ペンディング
- コネクションのハンドリング関数の非同期化と整理を進める。
- どこでブロックする?
- select:aioで対応
- accept:UNP vol.1の15.6節参照
- fgets:aioで対応
- どこでブロックする?
やること整理
- listenポートへのconnectが起きたらaccept
- acceptしてできるfdをaiocbへ登録
復習
lio_listio() 関数は、配列 aiocb_list で指定された I/O 操作の リストをそれぞれ開始する。 IBMのAIOの説明をパクって作ってたら
my_aiocb.aio_sigevent.notify_function = aio_completion_handler;
my_aiocb.aio_sigevent.notify_attributes = NULL;
void aio_completion_handler( sigval_t sigval )
のnotify_function, notify_attributes, sigval_tが無いってコンパイラに怒られた。
こういうときはincludeファイルを見ればよいのか。grepとfindで検索すればいい。
macだとどーこだ?/usr/include/にあった。
困りごと
acceptしてすぐにfgetsかけるとノンブロック設定しているのにブロックになってしまう。