test_system.cpp 2.18 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
    Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file

    This file is part of 0MQ.

    0MQ is free software; you can redistribute it and/or modify it under
    the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.

    0MQ is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

20 21
#include "testutil.hpp"

Richard Newton's avatar
Richard Newton committed
22
#if defined (ZMQ_HAVE_WINDOWS)
23
#   include <winsock2.h>
24
#   include <stdexcept>
Richard Newton's avatar
Richard Newton committed
25
#else
26 27 28
#   include <sys/socket.h>
#   include <netinet/in.h>
#   include <unistd.h>
Richard Newton's avatar
Richard Newton committed
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
#endif

#if defined (ZMQ_HAVE_WINDOWS)

void initialise_network()
{
    WSADATA info;
    if (WSAStartup(MAKEWORD(2,0), &info) != 0)
    {
        throw std::runtime_error("Could not start WSA");
    }
}

int close(int fd)
{
    return closesocket(fd);
}

#else

void initialise_network()
{
}

#endif
54 55 56 57 58 59 60

//  This test case stresses the system to shake out known configuration
//  problems. We're not using libzmq here but direct system calls. Note
//  that code may need wrapping to be properly portable.

int main (void)
{
Richard Newton's avatar
Richard Newton committed
61 62
    initialise_network();

63 64 65 66 67 68 69 70 71 72
    //  Check that we can create 1,000 sockets
    int handle [1000];
    int count;
    for (count = 0; count < 1000; count++) {
        handle [count] = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (handle [count] == -1) {
            printf ("W: Only able to create %d sockets on this box\n", count);
            printf ("I: Tune your system to increase maximum allowed file handles\n");
#if defined (ZMQ_HAVE_OSX)
            printf ("I: On OS/X, run 'ulimit -n 1200' in bash");
Matt Connolly's avatar
Matt Connolly committed
73
#elif defined (ZMQ_HAVE_LINUX)
74 75 76 77 78 79 80 81 82
            printf ("I: On Linux, run 'ulimit -n 1200' in bash");
#endif        
            return -1;
        }
    }
    //  Release the socket handles
    while (count)
        close (handle [count--]);
}