1

まあ..それはほとんど、errno変数をチェックするときに「IllegalSeek」エラーが発生しているようです。問題は、それが何を意味するのか私にはわからないということです。

UNIXではソケットがファイルのように扱われることは知っていますが、これがソケットとどのように関連しているのかわかりません。私が正確にやっていることは次のとおりです。

int sck = ::accept(m_socket, (struct sockaddr*)&client_address, (socklen_t*)&address_len);

次に、sck=-1およびerrno=ESPIPEを取得します

そして奇妙なことはそれがランダムに起こるということです。つまり、コードが正常に機能する場合もあれば、例外が発生する場合もあります。わかりやすいようにスレッドを使用しています。しかし、たとえばパラメータをチェックできるように、どのような動作でerrnoをESPIPEとして設定するaccept()呼び出しが行われるのかを知りたいだけです。

ありがとうネルソンR.ペレス

4

1 に答える 1

1

最も考えられる原因は、m_socket変数が壊れていることです。strace@Aidanが提案するように使用して、に渡される値を確認するか、accept(2)デバッガーをプロセスにアタッチして、そのメモリ位置にウォッチポイントを設定します。

于 2010-05-19T18:05:38.860 に答える