読者です 読者をやめる 読者になる 読者になる

ポジローぽけっと

昨日より今日、今日より明日を信じて、トライトライ

第十二回スパルタンプログラム

何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと

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かけるとノンブロック設定しているのにブロックになってしまう。