2011-01-03 12 views
0

FastCGI Developers Kitを使用して私の最初のC/C++ fastCGIアプリケーションを開発しています。C/C++のCGI/FastCGIアプリケーション(ソケットプログラミングの質問)

私は正常に(スニペットは、以下に示す)のサンプルプログラムのいずれかを構築しました:

int main (void) 
{ 
    int count = 0; 
    long pid = getpid(); 

    streambuf * cin_streambuf = cin.rdbuf(); 
    streambuf * cout_streambuf = cout.rdbuf(); 
    streambuf * cerr_streambuf = cerr.rdbuf(); 

    FCGX_Request request; 

    FCGX_Init(); 
    FCGX_InitRequest(&request, 0, 0); 

    while (FCGX_Accept_r(&request) == 0) 
    { 
     /* Handle request */ 
    } 

    return 0; 
} 

をしかし、私は上記の例を実行すると、それは単に終了します。デバッグ時に、FCGX_Accept_rがエラーコードを返していることに気付きました。さらに調査すると、accept()メソッド呼び出しが失敗していることに気付きました。

失敗した実際の行は次のとおりです。

socket = accept(listen_sock, (struct sockaddr *)&sa, &len); 

関数に渡される引数は次のとおりです。

listen_sock: 0 
len: 112 
sa: 

{un = {sun_family = 0, sun_path = "\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\000\\020\\"'\\000\\000\\032\\356m\\000\\000\\000\\000\\377\\377\\377\\377\\364\\277\\022\\000\\310\\366\\377\\277\\001\\000\\000\\000\\000\\000\\000\\000X\\366\\377\\277\\343\\276\\004\\b\\377\\377\\377\\377\\001\\000\\000\\000\\001\\000\\000\\000\\000\\000\\000\\000\\001\\000\\000\\000\\310\\366\\377\\277\\210\\366\\377\\277F\\277\\004\\b\\310\\366\\377\\277\\001\\000\\000\\000\\000"}, in = {sin_family = 0, sin_port = 0, sin_addr = {s_addr = 0}, sin_zero = "\\000\\000\\000\\000\\000\\000\\000"}} 

私はプログラミングソケットに新しいですので、私はすることができることで、いくつかの援助を必要としていますaccept()が失敗する原因を診断します。

上記の情報が与えられた場合、accept()の呼び出しが失敗する理由は誰にでも分かりますか?私はUbuntuの10.xの

+0

私の答えはhttp://stackoverflow.com/questions/9223007/spawn-fastcgi-apps-on-windows/11900263#11900263 –

答えて

3

に開発しています

は、このSDKについて多くを知ってはいけない、しかし彼らのヘッダをチラッと見では、着信要求を受け入れるように最初のソケットを作成し、これに合格する必要があることを明らかに方法はFCGX_InitRequestです。

http://www.fastcgi.com/devkit/include/fcgiapp.h

方法を明らかにする:あなたのコードが失敗した理由を、あなたは、そこで...

int FCGX_OpenSocket(const char *path, int backlog);私はあなたがソケットを作成するために呼び出すと仮定して、2番目のパラメータとして、このソケットにFCGX_InitRequestを呼ぶだろうsocketのために0を渡します。これは無効です!

+0

はい、ソケット0(fd)の値を渡すと、かなり疑わしいようでした。先端に感謝します。調査してお知らせします。さて、私が作成したコードは、キットの逐語的なコピーです。それで、それはそれにそれほど初歩的なエラーがあることをむしろ心配しています... – skyeagle

関連する問題