- 627 名前:デフォルトの名無しさん mailto:sage [2006/07/18(火) 19:03:35 ]
- Linux (Kernel 2.6.17) で、pthread_create() で複数スレッドを作り、
そのスレッド全てが同一の bind(), listen() されたソケットに対して accept() を行うプログラムを作ったのですが(O_NONBLOCKなソケット ですが)、クライアントプログラムから複数 connect() すると、 accept() が同じ値のファイルディスクリプタを返して来ます。処理を 単純に書くとこんな感じです。 for(;;) { int cs = accept(...); // ここで cs が別スレッドと同じ値になる。 if (cs == -1) { if (errno == EAGAIN) { usleep(50000); continue; } else { break; // error } } else { proc(cs); // cs を使った処理。 close(cs); } } accept() の前後に pthread_mutex_lock(), pthread_mutex_unlock() で ロック、アンロックをしても同じでした。 これって Linux のバグなんでしょうか? これを回避するにはやはり accept() をするスレッドを一つにしないと 駄目ですか?
|

|