Я получаю сообщение об ошибке и не могу понять, по каким причинам это могло быть связано с недостаточной документацией для 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");
}
}