void EAbstractSocketSessionConfig::doSetAll(EIoSessionConfig* config) { ESocketSessionConfig* ssc = dynamic_cast<ESocketSessionConfig*>(config); if (!ssc) { return; } EAbstractSocketSessionConfig* cfg = dynamic_cast<EAbstractSocketSessionConfig*>(config); if (cfg) { // Minimize unnecessary system calls by checking all 'propertyChanged' properties. if (cfg->isKeepAliveChanged()) { setKeepAlive(cfg->isKeepAlive()); } if (cfg->isOobInlineChanged()) { setOobInline(cfg->isOobInline()); } if (cfg->isReceiveBufferSizeChanged()) { setReceiveBufferSize(cfg->getReceiveBufferSize()); } if (cfg->isReuseAddressChanged()) { setReuseAddress(cfg->isReuseAddress()); } if (cfg->isSendBufferSizeChanged()) { setSendBufferSize(cfg->getSendBufferSize()); } if (cfg->isSoLingerChanged()) { setSoLinger(cfg->getSoLinger()); } if (cfg->isTcpNoDelayChanged()) { setTcpNoDelay(cfg->isTcpNoDelay()); } if (cfg->isTrafficClassChanged() && getTrafficClass() != cfg->getTrafficClass()) { setTrafficClass(cfg->getTrafficClass()); } } else { ESocketSessionConfig* cfg = dynamic_cast<ESocketSessionConfig*>(config); setKeepAlive(cfg->isKeepAlive()); setOobInline(cfg->isOobInline()); setReceiveBufferSize(cfg->getReceiveBufferSize()); setReuseAddress(cfg->isReuseAddress()); setSendBufferSize(cfg->getSendBufferSize()); setSoLinger(cfg->getSoLinger()); setTcpNoDelay(cfg->isTcpNoDelay()); if (getTrafficClass() != cfg->getTrafficClass()) { setTrafficClass(cfg->getTrafficClass()); } } }
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; }