pthreadについて質問です。

メインスレッド
-----------
1-1. socket要求待ち受け
1-2. accept()、recv()
1-3. pthread_attr_init()
1-4. pthread_attr_setdetachstate()でPTHREAD_CREATE_DETACHEDを設定
1-5. pthread_create()
1-6. pthread_attr_destroy()
1-7. pthread_cancel()

子スレッド
-----------
2-1. 1-2の残りをrecv()、send()
2-2. select()で1秒ほど待機
2-3 socket解放
2-4. return 0

こんな感じのコードを書いて動かしたところ、クライアントからの一発目の要求は2-2で
pthread_cancel()が走り、正常に取り消されまた1-1に戻ったんですが、直後に二発目
の要求を出すと、pthread_create()の戻り値は正常なのに2-1の処理が走りません。
スレッドはデタッチ状態で起動するため、pthread_cancel()の後スタックが解放されるから
二発目以降の要求も問題ないと思ったんですが、何が問題なんでしょうか。
ソケットのclose、shutdownをしていないのが問題?

OSはHP-UX11.0、コンパイラはgcc2.95です。