c++ - C++中的套接字创建

标签 c++ sockets

我是 C++ 的新手,正在尝试在 C++ 中实现 VCONFIG (VLAN)。 由于我的主要 .cpp 具有不同的功能来添加/删除/设置 VLAN 的优先级,因此我使用套接字来执行这些操作。

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

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

这是.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 文件中这样做,有什么区别?

所以任何人都可以澄清我。

非常感谢!

最佳答案

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

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

无论如何,您的问题的代码片段都会有所帮助。

关于c++ - C++中的套接字创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148179/

相关文章:

连接到套接字使连接处于 TIME_WAIT 状态

c# - 是否可以获取通过异步连接发送的数据?

c++ - 在不指定实例化的情况下调用类模板的静态方法的方法?

c++ - 当我编译我的程序时,这个内存映射意味着什么?

c++ - 什么时候可以/将在 C++ 中内联一个函数?可以强制执行内联行为吗?

php - 有人有示例代码连接PHP中的两个套接字吗?

c# - 使用 System.Net.Sockets.Socket.AcceptAsync 模型时发生堆栈溢出

php - PEAR Mail 无法连接到 Gmail SMTP,无法连接到套接字

c++ - 如何重载 >> 运算符以采用逗号分隔的变量参数列表

c++ - 为什么 float 可以比较?