用C ++创建套接字

时间:2013-06-17 13:04:46

标签: c++ sockets

我是c ++的新手,尝试用C ++实现VCONFIG(VLAN)。 由于我的主要.cpp具有不同的功能来添加/重新设置/设置VLAN的优先级,我使用socket来执行这些操作。

我想在调用构造函数时创建socket(一次),并验证是否在每个函数中创建了套接字。

我在构造函数中使用了套接字创建函数,我检查了每个函数,但以错误的文件描述符错误结束。

以下是.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文件中构造函数中的Socket创建是否正确,或者我是否可以在.cpp文件中创建。如果我在.cpp文件中执行它有什么区别?

所以任何人都可以请你澄清。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我想你应该在构造函数中创建后检查描述符。

  1. 如果构造函数中的socket是好的,那么在您使用的其他函数中,(使用初始化的)套接字变量是不同的。在这种情况下,这是您的代码问题。
  2. 如果描述符在构造函数中也是错误的,那么你应该修改描述符初始化代码。
  3. 描述符检查代码也可能有错误。
  4. 无论如何,您的问题的代码段都会有所帮助。