%description:
Tests UDPSocket::bind() can not be called more than once on a socket.

%#--------------------------------------------------------------------------------------------------------------
%file: TestApp.cc
#include "inet/transportlayer/contract/udp/UDPSocket.h"
#include "inet/transportlayer/contract/udp/UDPControlInfo_m.h"

using namespace inet;
namespace UDPSocket_2 {

class TestApp : public cSimpleModule
{
    public:
       TestApp() : cSimpleModule(65536) {}
    protected:
        virtual void activity();
};

Define_Module(TestApp);

void TestApp::activity()
{
  UDPSocket s;
  s.setOutputGate(gate("udpOut"));
  s.bind(100);
  s.bind(200); // will fail
}

}

%#--------------------------------------------------------------------------------------------------------------
%file: TestApp.ned
import inet.applications.contract.IUDPApp;

simple TestApp like IUDPApp
{
    gates:
        input udpIn;
        output udpOut;
}

%#--------------------------------------------------------------------------------------------------------------
%inifile: omnetpp.ini
[General]
ned-path = .;../../../../src;../../lib
network = SimpleTestNetwork
cmdenv-express-mode = false
cmdenv-event-banner-details = true

#omnetpp 5.0 - 5.1 compatibility:
eventlog-file = "${resultdir}/${configname}-${runnumber}.elog"
output-scalar-file = "${resultdir}/${configname}-${runnumber}.sca"
output-vector-file = "${resultdir}/${configname}-${runnumber}.vec"
snapshot-file = "${resultdir}/${configname}-${runnumber}.sna"

**.client.numUdpApps = 1
**.client.udpApp[0].typename = "TestApp"

%exitcode: 1

%#--------------------------------------------------------------------------------------------------------------
%postrun-command: grep "<!>" test.* > test_err.out || true
%#--------------------------------------------------------------------------------------------------------------
%contains-regex: test_err.out
(<!> Error in module \(inet::UDP\) SimpleTestNetwork\.client\.udp \(id=\d+\) at event \#\d+, t=0: bind: socket is already bound \(sockId=\d+\).)|(<!> Error: bind: socket is already bound \(sockId=\d+\) -- in module \(inet::UDP\) SimpleTestNetwork\.client\.udp \(id=\d+\), at t=0s, event \#\d+)
%#--------------------------------------------------------------------------------------------------------------
%# %not-contains: stdout
%# undisposed object:
%# %not-contains: stdout
%# -- check module destructor
%#--------------------------------------------------------------------------------------------------------------
