соединение omnet ++ не открыто - PullRequest
0 голосов
/ 11 июля 2020

Я получаю сообщение об ошибке и не могу понять, по каким причинам это могло быть связано с недостаточной документацией для OMNeT ++ и INET.

Ошибка обработки команды SEND: соединение не открыто - в модуле (inet :: tcp :: Tcp) TCPnetworksim.M.tcp (id = 280), в t = 2s, событие # 368

Вот часть моего кода (инициализация), которая, как я полагаю, связана с открытием соединения. Достаточно интересно, что симуляция работала нормально в течение первых двух секунд настенных часов (я считаю, что первая секунда предназначена для построения сети), прежде чем столкнуться с этой ошибкой в ​​соответствии с графическими дисплеями.

Примечание. TcpSocket socket; - переменная-член.

void MasterNode::initialize(int stage)
{
    cSimpleModule::initialize(stage);

    if (stage == INITSTAGE_LOCAL) {
        delay = par("replyDelay");
        maxMsgDelay = 0;

        //statistics
        msgsRcvd = msgsSent = bytesRcvd = bytesSent = 0;

        WATCH(msgsRcvd);
        WATCH(msgsSent);
        WATCH(bytesRcvd);
        WATCH(bytesSent);

        directArrival = registerSignal("directMsgArrived");
        realTime = registerSignal("recordWallTime");

        startClock = Clock::now();

        TcpControl::getInstance().setMasterModule(getParentModule()->getName());

        cMessage *wallTime = new cMessage("record_wall_time", msg_kind::RECORD_TIME);
        scheduleAt(simTime(), wallTime);
        cMessage *timer = new cMessage("original timer", msg_kind::TIMER);
        scheduleAt(simTime() + 2, timer);
     }
    else if (stage == INITSTAGE_APPLICATION_LAYER) {
        const char *localAddress = par("localAddress");
        int localPort = par("localPort");
        socket.setOutputGate(gate("socketOut"));
        socket.bind(localAddress[0] ? L3AddressResolver().resolve(localAddress) : L3Address(), localPort);
        socket.listen();

        cModule *node = findContainingNode(this);
        NodeStatus *nodeStatus = node ? check_and_cast_nullable<NodeStatus *>(node->getSubmodule("status")) : nullptr;
        bool isOperational = (!nodeStatus) || nodeStatus->getState() == NodeStatus::UP;
        if (!isOperational)
            throw cRuntimeError("This module doesn't support starting in node DOWN state");
    }
}
...