void EAbstractDatagramSessionConfig::doSetAll(EIoSessionConfig* config) { if (!(instanceof<EDatagramSessionConfig>(config))) { return; } EAbstractDatagramSessionConfig* cfg = dynamic_cast<EAbstractDatagramSessionConfig*>(config); if (cfg) { // Minimize unnecessary system calls by checking all 'propertyChanged' properties. if (cfg->isBroadcastChanged()) { setBroadcast(cfg->isBroadcast()); } if (cfg->isReceiveBufferSizeChanged()) { setReceiveBufferSize(cfg->getReceiveBufferSize()); } if (cfg->isReuseAddressChanged()) { setReuseAddress(cfg->isReuseAddress()); } if (cfg->isSendBufferSizeChanged()) { setSendBufferSize(cfg->getSendBufferSize()); } if (cfg->isTrafficClassChanged() && getTrafficClass() != cfg->getTrafficClass()) { setTrafficClass(cfg->getTrafficClass()); } } else { EDatagramSessionConfig* cfg = dynamic_cast<EDatagramSessionConfig*>(config); setBroadcast(cfg->isBroadcast()); setReceiveBufferSize(cfg->getReceiveBufferSize()); setReuseAddress(cfg->isReuseAddress()); setSendBufferSize(cfg->getSendBufferSize()); if (getTrafficClass() != cfg->getTrafficClass()) { setTrafficClass(cfg->getTrafficClass()); } } }
void SocketImpl::bind6(const SocketAddress& address, bool reuseAddress, bool ipV6Only) { #if defined(POCO_HAVE_IPv6) if (address.family() != IPAddress::IPv6) throw Poco::InvalidArgumentException("SocketAddress must be an IPv6 address"); if (_sockfd == POCO_INVALID_SOCKET) { init(address.af()); } #ifdef IPV6_V6ONLY setOption(IPPROTO_IPV6, IPV6_V6ONLY, ipV6Only ? 1 : 0); #else if (ipV6Only) throw Poco::NotImplementedException("IPV6_V6ONLY not defined."); #endif if (reuseAddress) { setReuseAddress(true); setReusePort(true); } int rc = ::bind(_sockfd, address.addr(), address.length()); if (rc != 0) error(address.toString()); #else throw Poco::NotImplementedException("No IPv6 support available"); #endif }
void TSocket::setSocketOptions(const Options& options) { // Connect timeout options_.connTimeout = options.connTimeout; // Send timeout if (options.sendTimeout >= 0) { setSendTimeout(options.sendTimeout); } // Recv timeout if (options.recvTimeout >= 0) { setRecvTimeout(options.recvTimeout); } // Send Buffer Size if (options.sendBufSize > 0) { setSendBufSize(options.sendBufSize); } // Recv Buffer Size if (options.recvBufSize > 0) { setRecvBufSize(options.recvBufSize); } // Linger setLinger(options.lingerOn, options.lingerVal); // No delay setNoDelay(options.noDelay); setReuseAddress(options.reuseAddr); }
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 Samurai::IO::Net::DatagramSocket::listen() { if (!addr || sd == INVALID_SOCKET) return false; if (!setReuseAddress(true)) return false; if (!setNonBlocking(true)) return false; if (!bind(addr)) return false; setMonitor(Samurai::IO::Net::SocketMonitor::MRead); return true; }
/* Connect function to initialise the UDP socket * Returns true if sockt created successfully, false otherwise */ bool UDPDataLink::connect() { if (startWindowsSockets() && //start winsock setupLocalInterface(port) && //set up local interface setupDestinationAddress(address, port) && //set up desination address createSocket() && //create socket setReuseAddress(true) && //enable address reuse bindSocket()) { //bind socket connected = true; return true; } else { connected = false; return false; } }
void SocketImpl::bind(const SocketAddress& address, bool reuseAddress) { if (_sockfd == POCO_INVALID_SOCKET) { init(address.af()); } if (reuseAddress) { setReuseAddress(true); setReusePort(true); } #if defined(POCO_VXWORKS) int rc = ::bind(_sockfd, (sockaddr*) address.addr(), address.length()); #else int rc = ::bind(_sockfd, address.addr(), address.length()); #endif if (rc != 0) error(address.toString()); }
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; }
/** @return false and set error code and description string on failure */ AREXPORT bool ArSocket::open(int port, Type type, const char *openOnIP) { int ret; char localhost[MAXGETHOSTSTRUCT]; myError = NoErr; myErrorStr.clear(); if ((type == TCP) && ((myFD=socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)) { //ret=WSAGetLastError(); myError = NetFail; myErrorStr="Failure to make TCP socket"; ArLog::logErrorFromOS(ArLog::Normal, "ArSocket::open: could not create tcp socket"); return(false); } else if ((type == UDP) && ((myFD=socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)) { myError = NetFail; myErrorStr="Failure to make UDP socket"; ArLog::logErrorFromOS(ArLog::Normal, "ArSocket::open: could not create udp socket"); return(false); } setLinger(0); setReuseAddress(); /* MPL this is useless withw hat I Took out below if (gethostname(localhost, sizeof(localhost)) == 1) { myErrorStr="Failure to locate localhost"; ArLog::logErrorFromOS(ArLog::Normal, "ArSocket::open: gethostname failed"); return(false); } */ memset(&mySin, 0, sizeof(mySin)); /* MPL took this out since it was just overriding it with the INADDR_ANY anyways and it could cause slowdowns if a machine wasn't configured so lookups are quick if (!hostAddr(localhost, mySin.sin_addr)) return(false); */ setRawIPString(); if (openOnIP != NULL) { if (!hostAddr(openOnIP, mySin.sin_addr)) { myError = NameLookup; myErrorStr = "Name lookup failed"; ArLog::log(ArLog::Normal, "Couldn't find ip of %s to open on", openOnIP); ::shutdown(myFD, SD_BOTH); myFD = INVALID_SOCKET; return(false); } else { //printf("Opening on %s\n", openOnIP); } } else { mySin.sin_addr.s_addr=htonl(INADDR_ANY); } mySin.sin_family=AF_INET; mySin.sin_port=hostToNetOrder(port); myType=type; if ((ret=bind(myFD, (struct sockaddr *)&mySin, sizeof(mySin))) < 0) { myErrorStr="Failure to bind socket to port "; sprintf(localhost, "%d", port); myErrorStr+=localhost; myError = NetFail; ArLog::logErrorFromOS(ArLog::Normal, "ArSocket::open: could not bind"); ::shutdown(myFD, SD_BOTH); myFD = INVALID_SOCKET; return(false); } if ((type == TCP) && (listen(myFD, 5) < 0)) { myErrorStr="Failure to listen on socket"; myError = NetFail; ArLog::logErrorFromOS(ArLog::Normal, "ArSocket::open: could not listen"); ::shutdown(myFD, SD_BOTH); myFD = INVALID_SOCKET; return(false); } return(true); }
/** @return false and set error code and description string on failure */ bool ArSocket::open(int port, Type type, const char *openOnIP) { int ret; char localhost[maxHostNameLen()]; myError=NoErr; myErrorStr.clear(); if ((type == TCP) && ((myFD=socket(AF_INET, SOCK_STREAM, 0)) < 0)) { myErrorStr="Failure to make TCP socket"; perror("socket"); return(false); } else if ((type == UDP) && ((myFD=socket(AF_INET, SOCK_DGRAM, 0)) < 0)) { myErrorStr="Failure to make UDP socket"; perror("socket"); return(false); } ArUtil::setFileCloseOnExec(myFD); setLinger(0); setReuseAddress(); myType=type; /* MPL removed this since with what I Took out down below months ago if (gethostname(localhost, sizeof(localhost)) == 1) { myErrorStr="Failure to locate localhost"; perror("gethostname"); return(false); } */ bzero(&mySin, sizeof(mySin)); /* MPL took this out since it was just overriding it with the INADDR_ANY anyways and it could cause slowdowns if a machine wasn't configured so lookups are quick if (!hostAddr(localhost, mySin.sin_addr) && !hostAddr("localhost", mySin.sin_addr)) return(false); */ if (openOnIP != NULL) { if (!hostAddr(openOnIP, mySin.sin_addr)) { ArLog::log(ArLog::Normal, "Couldn't find ip of %s to open on", openOnIP); myError = NameLookup; myErrorStr = "Name lookup failed"; return(false); } else { //printf("Opening on %s\n", openOnIP); } } else { mySin.sin_addr.s_addr=htonl(INADDR_ANY); } setRawIPString(); mySin.sin_family=AF_INET; mySin.sin_port=hostToNetOrder(port); if ((ret=bind(myFD, (struct sockaddr *)&mySin, sizeof(mySin))) < 0) { myError = NetFail; myErrorStr="Failure to bind socket to port "; sprintf(localhost, "%d", port); myErrorStr+=localhost; perror("socket"); return(false); } if ((type == TCP) && (listen(myFD, 5) < 0)) { myError = NetFail; myErrorStr="Failure to listen on socket"; perror("listen"); return(false); } return(true); }