Beispiel #1
0
/*
 * 设置int类型的option
 */
bool Socket::setIntOption (int option, int value) {
    bool rc=false;
    if (checkSocketHandle()) {
        rc = (setsockopt(_socketHandle, SOL_SOCKET, option,
                         (const void *)(&value), sizeof(value)) == 0);
    }
    return rc;
}
Beispiel #2
0
bool Socket::setTcpQuickAck(bool quickAck) {
  bool rc = false;
  int quickAckInt = quickAck ? 1 : 0;
  if (checkSocketHandle()) {
    rc = (setsockopt(_socketHandle, IPPROTO_TCP, TCP_QUICKACK,
          (const void *)(&quickAckInt), sizeof(quickAckInt)) == 0);
  }
  return rc;
}
Beispiel #3
0
bool Socket::setTcpNoDelay(bool noDelay) {
    bool rc = false;
    int noDelayInt = noDelay ? 1 : 0;
    if (checkSocketHandle()) {
        rc = (setsockopt(_socketHandle, IPPROTO_TCP, TCP_NODELAY,
                         (const void *)(&noDelayInt), sizeof(noDelayInt)) == 0);
    }
    return rc;
}
Beispiel #4
0
bool Socket::connect( AddrInet& addr) 
{
	int ret;
	if (!checkSocketHandle()) {
		return false;
	}
	 struct sockaddr* remoteaddr = ( struct sockaddr*)addr.getAddr(); 
    ret =::connect(_socketHandle, remoteaddr, sizeof(struct sockaddr));

    return ret;
}
Beispiel #5
0
/*
 * 设置time类型的option
 */
bool Socket::setTimeOption(int option, int milliseconds) {
    bool rc=false;
    if (checkSocketHandle()) {
        struct timeval timeout;
        timeout.tv_sec = (int)(milliseconds / 1000);
        timeout.tv_usec = (milliseconds % 1000) * 1000000;
        rc = (setsockopt(_socketHandle, SOL_SOCKET, option,
                         (const void *)(&timeout), sizeof(timeout)) == 0);
    }
    return rc;
}
Beispiel #6
0
bool Socket::setSoLinger(bool doLinger, int seconds) {
    bool rc=false;
    struct linger lingerTime;
    lingerTime.l_onoff = doLinger ? 1 : 0;
    lingerTime.l_linger = seconds;
    if (checkSocketHandle()) {
        rc = (setsockopt(_socketHandle, SOL_SOCKET, SO_LINGER,
                         (const void *)(&lingerTime), sizeof(lingerTime)) == 0);
    }

    return rc;
}
Beispiel #7
0
bool Socket::bind( AddrInet& addr)  
{
	int ret;
	if (!checkSocketHandle()) {
		return false;
	}
	 struct sockaddr* serveraddr = ( struct sockaddr*)addr.getAddr();
	ret = ::bind(_socketHandle,serveraddr , sizeof(struct sockaddr));
	if(ret == 0) {
		return true;
	}
	return false;
}
Beispiel #8
0
/*
 * 是否阻塞
 */
bool Socket::setSoBlocking(bool blockingEnabled) {
    bool rc=false;

    if (checkSocketHandle()) {
        int flags = fcntl(_socketHandle, F_GETFL, NULL);
        if (flags >= 0) {
            if (blockingEnabled) {
                flags &= ~O_NONBLOCK; // clear nonblocking
            } else {
                flags |= O_NONBLOCK;  // set nonblocking
            }

            if (fcntl(_socketHandle, F_SETFL, flags) >= 0) {
                rc = true;
            }
        }
    }

    return rc;
}
Beispiel #9
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;
}