2011-06-21 19 views
1
  int dataLength; 
      int readLength = read(conn->getFd(), &dataLength, HEADER_SIZE); 
      printf("Header read %d \n", readLength); 

      if(readLength == 0){ 
       removeClient(conn); 
       close(conn->getFd()); 
      } 
      else { 
       /* 
       * Do not parse anything here. 
       * Pass the raw data to the work handler. 
       */ 
       char *buf = new char[dataLength+1]; 
       int dataReadLength = read(conn->getFd(), buf, dataLength); 
       printf("Data read %d \n", dataReadLength); 

       printf("ServerManager::eventAcceptLoop, A message has been received \n"); 
       addWork(conn->getFd(), buf, dataReadLength); 

私はネットワークプログラミングを行っており、このコードがあります。 localhostでは正常に動作しますが(エラーは発生しません)、現実世界のネットワークでこれを試してみると、それは爆発するだろうと確信しています。問題は、私はネットワークプログラミングの専門家ではなく、追加するはずのエラー処理が不明だということです。また、特定のエラー処理を含む良い例やチュートリアルを見つけなければなりませんでした。読み取りハンドルエラー

あなたが私にエラー処理を手助けする良い例やチュートリアルを提供できるなら、私は非常に感謝します。

ありがとうございます。

+0

[読み取りハンドルの問題..](http://stackoverflow.com/questions/6420164/read-handle-problem)の重複が可能です。 1時間未満前に尋ねられました。 – Nemo

答えて

1

read()-1を返す場合を分析する必要があります。

このチュートリアル/参考資料を確認してください:Beej's Guide to Network Programming ネットワークプログラミングの参考資料です。

+0

また、 'read(0)'が '0'を返す場合もあります。 – Nemo