我是 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 文件中的构造函数中的 Socket 创建是否正确,或者我可以在 .cpp 文件中创建。如果我在 .cpp 文件中执行此操作,有什么区别?
所以任何人都可以请澄清我。
非常感谢!