X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fbase%2Fsocket.cc;h=c39accd7e80f0b28cefa853d49dc4da323209367;hb=b312a41f21b6f76607fe7480a915a4c5093386a3;hp=45a60e7e37b1c654795f4706fdcb1ff3700885ab;hpb=4a5b51b516853c9fcaabc44caacdd7e8e93dc0ef;p=gem5.git diff --git a/src/base/socket.cc b/src/base/socket.cc index 45a60e7e3..c39accd7e 100644 --- a/src/base/socket.cc +++ b/src/base/socket.cc @@ -24,23 +24,41 @@ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Authors: Nathan Binkert */ -#include -#include - #include #include - -#include +#include +#include #include -#include "sim/host.hh" +#include + #include "base/misc.hh" #include "base/socket.hh" +#include "base/types.hh" using namespace std; +bool ListenSocket::listeningDisabled = false; +bool ListenSocket::anyListening = false; + +void +ListenSocket::disableAll() +{ + if (anyListening) + panic("Too late to disable all listeners, already have a listener"); + listeningDisabled = true; +} + +bool +ListenSocket::allDisabled() +{ + return listeningDisabled; +} + //////////////////////////////////////////////////////////////////////// // // @@ -85,11 +103,15 @@ ListenSocket::listen(int port, bool reuse) return false; } - if (::listen(fd, 1) == -1) - panic("ListenSocket(listen): listen() failed!"); + if (::listen(fd, 1) == -1) { + if (errno != EADDRINUSE) + panic("ListenSocket(listen): listen() failed!"); - listening = true; + return false; + } + listening = true; + anyListening = true; return true; }