NetworkReturn * ScarabServer::startListening() { NetworkReturn * rc = new NetworkReturn(); mdebug("startListening()"); if(listening) { rc->setMWorksCode(NR_SUCCESS_NETWORK_MESSAGE); rc->setInformation("Server is already running."); return rc; } if(listenUri.size() == 0) { rc->setMWorksCode(NR_FAILED); rc->setInformation("URI not specified for server"); return rc; } std::string fullUri = createScarabURI(); if(fullUri.size() == 0) { rc->setMWorksCode(NR_FAILED); rc->setInformation("Could not create a valid URI"); return rc; } int error = 1; // mnetwork("Trying listening socket at %s on port %d", // listenAddress.c_str(), // listenPort); // mprintf("URI = %s", fullUri.c_str()); listeningSocket = scarab_session_listen(fullUri.c_str()); error = getScarabError(listeningSocket); while(error) { mnetwork("Failed to open a listening socket at %s on port %d", listenAddress.c_str(), listenPort); //mdebug("Maybe print out why here??"); // if there is another available port we will try again if(!chooseNewPort()) { rc->setMWorksCode(NR_FATAL_ERROR); rc->setPackageCode(error); rc->setOSErrorCode(getScarabOSError(listeningSocket)); rc->setInformation("Ran out of ports to listen on. Networking impossible"); rc->appendInformation(getScarabErrorDescription(error)); rc->appendInformation(getOSErrorDescription( getScarabOSError(listeningSocket))); return rc; } fullUri = createScarabURI(); listeningSocket = scarab_session_listen(fullUri.c_str()); error = getScarabError(listeningSocket); } mnetwork("Listening socket started at %s on port %d", listenAddress.c_str(), listenPort); listening = true; return rc; }
void logDescriptiveScarabMessage(ScarabSession * s) { int scCode = getScarabError(s); // scarab error code int oserr = getScarabOSError(s); const char *scarab_error_string = scarab_strerror(scCode); mnetwork("ERROR: SCR-%5.5i: %s: %s", scCode, scarab_moderror(scCode), scarab_error_string); if(oserr) { const char *scarab_os_error_string = scarab_os_strerror(oserr); mnetwork("OSERR: %i: %s", oserr, scarab_os_error_string); } }