私は 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 ファイルで行う場合、違いは何ですか?
誰でも私を明確にしてください。
どうもありがとう!