Exemplo n.º 1
0
//==============================================================================
// PlainDatagramSocketImpl::create
//
//==============================================================================
void PlainDatagramSocketImpl::create()
{
	if(m_rpSocketDescriptor)
		throw SocketException(QC_T("socket already created"));

	SocketDescriptor::OSSocketDescriptorType socketFD;

	// Reset member control flags just in case this DatagramSocketImpl has been 
	// used and closed before.  This probably isn't possible, but
	// it is sensible to guard against it anyway.
	m_localPort = -1;
	m_remotePort = -1;

	//
	// Attempt to create a stream socket.
	//
	if( (socketFD = socket(AF_INET, SOCK_DGRAM, 0)) == QC_INVALID_SOCKET)
	{
		static const String err(QC_T("unable to create datagram socket: "));
		String errMsg = err + NetUtils::GetSocketErrorString();
		throw SocketException(errMsg);
	}

	//
	// After successfully creating a socket, we must immediately wrap
	// the os-supplied socket descriptor in our own reference-counted
	// SocketDescriptor object.
	//
	m_rpSocketDescriptor = new SocketDescriptor(socketFD);

	//
	// DatagramSockets require SO_BROADCAST enabled by default
	//
	setIntOption(SOL_SOCKET, SO_BROADCAST, 1);
}
Exemplo n.º 2
0
bool serverSocket::listen() {
	if (!checkSocketHandle()) {
		return false;	
	}

	setSoLinger(false,0);
	setReuseAddress(true);
	setIntOption(SO_KEEPALIVE,1);	
	setIntOption(SO_SNDBUF,640000);	
	setIntOption(SO_RCVBUF,640000);
	setTcpNoDelay(true);

	if(::bind(_socketHandle,(struct sockaddr *) &_address,sizeof(_address)) <0) {
		return false;	
	}

	if(::listen(_socketHandle,backLog) <0) {
		return false;	
	}

	return true;
}
Exemplo n.º 3
0
static int
parseOneOption (char *opt, char* const argv[], const int argc, int *pos)
{
    if (strcmp(opt,"-activate") == 0)
    {
        ASSERT_HAS_NEXT();
        char *o = argv[++(*pos)];
        if (!hasCommandOption(o))
        {
            errorMessage = o;
            return 1;
        }

        (*pos)++;
        (*pos) -= 2;
        setBoolOption(o,TRUE);
        return 0;
    }
    else if (strcmp(opt,"-deactivate") == 0)
    {
        ASSERT_HAS_NEXT();
        char *o = argv[++(*pos)];
        if (!hasCommandOption(o))
        {
            errorMessage = o;
            return 1;
        }

        (*pos)++;
        (*pos) -= 2;
        setBoolOption(o,FALSE);
        return 0;
    }
    else if (hasCommandOption(opt))
    {
        char *o = commandOptionGetOption(opt);
        (*pos)++;

        switch(getOptionType(o))
        {
            case OPTION_INT:
            {
                ASSERT_HAS_NEXT();
                int val = atoi(argv[*pos]);
                setIntOption(o,val);
                (*pos)++;
                (*pos) -= 2;
            }
            break;
            case OPTION_STRING:
            {
                ASSERT_HAS_NEXT();
                setStringOption(o,strdup(argv[*pos]));
                (*pos)++;
                (*pos) -= 2;
            }
            break;
            case OPTION_FLOAT:
            {
                ASSERT_HAS_NEXT();
                //TODO
                (*pos)++;
                (*pos) -= 2;
            }
            break;
            case OPTION_BOOL:
                // if user has given value as separate argument
                if (*pos < argc && !isOption(argv[*pos]))
                {
                    char *bVal = argv[*pos];
                    if (streq(bVal,"TRUE") || streq(bVal,"t") || streq(bVal,"1") || streq(bVal,"true"))
                        setBoolOption(o,TRUE);
                    else
                        setBoolOption(o,FALSE);
                }
                // otherwise mentioning an option sets it to TRUE
                else
                {
                    setBoolOption(o, TRUE);
                    (*pos) -= 1;
                }
            break;
        }
        return 0;
    }
    else
    {
        errorMessage = opt;
        return 1;
    }
}