1

私は C++ の初心者で、C++ で VCONFIG (VLAN) の実装を試みています。メインの .cpp には、VLAN に優先度を追加/再設定/設定するためのさまざまな機能があるため、ソケットを使用してこれらの操作を行います。

コンストラクターが呼び出されたときにのみ(1回)ソケットを作成し、すべての関数でソケットが作成されているかどうかを検証したいと思います。

コンストラクターでソケット作成関数を使用し、各関数をチェックインしましたが、Bad file descriptorエラーで終了しました。

.h ファイルのコード スニペットを次に示します。

 class  CVLANConf
 {
    private:
       int m_sockfd;

    public:

        CVLANConf() {
            m_sockfd = (socket (AF_INET,SOCK_STREAM,0));
          }
        ~CVLANConf();

  }

.cpp ファイルのコード スニペット

    ABC::CVLANConf::CVLANConf()
    {

     }

     ABC::CVLANConf::~CVLANConf()
     {

     }

     void ABC::CVLANConf::VlanInitialize()
     {
      VlanAdd(Interface, 5);
     }

     void  ABC:CVLANConf::VlanAdd(UCHAR* InterfaceName, USHORT VlanID)
     {


   if (m_sockfd > 0) {
       /*FILL vlan_ioctl_args structure*/
      vlan_request.cmd     = ADD_VLAN_CMD;
          vlan_request.u.VID   = add_vid;
          strncpy(vlan_request.device1, add_iface , sizeof(add_iface) );

          /*IOCTL*/

          if (ioctl (m_sockfd, SIOCSIFVLAN, &vlan_request) < 0)
           fprintf(stderr,"ERROR: trying to add VLAN #%u to IF -:%s:- error: %s\n",VlanID, add_iface, strerror(errno));

           else
            fprintf(stdout,"Added VLAN with VID == %u to IF -:%s:-\n",add_vid, add_iface);
      }

私は Linux で作業しています。私の質問は、.h ファイルのコンストラクターでのソケットの作成が正しいか、.cpp ファイルで行うことができるかということです。.cpp ファイルで行う場合、違いは何ですか?

誰でも私を明確にしてください。

どうもありがとう!

4

1 に答える 1

0

コンストラクターで作成した後、記述子を確認する必要があると思います。

  1. コンストラクターのソケットが適切な場合、他の関数では、(初期化されたものとは) 異なるソケット変数を使用します。この場合、それはあなたのコードの問題です。
  2. 記述子がコンストラクターでも悪い場合は、記述子の初期化コードを修正する必要があります。
  3. また、記述子チェック コードに誤りがある可能性もあります。

とにかく、問題のコード スニペットが役に立ちます。

于 2013-06-17T13:50:44.897 に答える