BOOL CUdpServer::CreateListenSocket(LPCTSTR pszBindAddress, USHORT usPort) { BOOL isOK = FALSE; m_soListen = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if(m_soListen != INVALID_SOCKET) { VERIFY(::SSO_UDP_ConnReset(m_soListen, FALSE) == NO_ERROR); SOCKADDR_IN addr; ::sockaddr_A_2_IN(AF_INET, pszBindAddress, usPort, addr); if(::bind(m_soListen, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN)) != SOCKET_ERROR) { if(FirePrepareListen(m_soListen) != ISocketListener::HR_ERROR) isOK = TRUE; else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_FUNCTION_FAILED); } else SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); return isOK; }
BOOL CTcpServer::CreateListenSocket(LPCTSTR lpszBindAddress, USHORT usPort) { BOOL isOK = FALSE; if(!lpszBindAddress || lpszBindAddress[0] == 0) lpszBindAddress = DEFAULT_IPV4_BIND_ADDRESS; HP_SOCKADDR addr; if(::sockaddr_A_2_IN(lpszBindAddress, usPort, addr)) { m_usFamily = addr.family; m_soListen = socket(m_usFamily, SOCK_STREAM, IPPROTO_TCP); if(m_soListen != INVALID_SOCKET) { BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0); ENSURE(::SSO_KeepAliveVals(m_soListen, bOnOff, m_dwKeepAliveTime, m_dwKeepAliveInterval) == NO_ERROR); ENSURE(::SSO_ExclusiveAddressUse(m_soListen, TRUE) == NO_ERROR); ENSURE(::SSO_NoBlock(m_soListen) == NO_ERROR); if(::bind(m_soListen, addr.Addr(), addr.AddrSize()) != SOCKET_ERROR) { if(TRIGGER(FirePrepareListen(m_soListen)) != HR_ERROR) { if(::listen(m_soListen, m_dwSocketListenQueue) != SOCKET_ERROR) { m_pfnAcceptEx = ::Get_AcceptEx_FuncPtr(m_soListen); m_pfnGetAcceptExSockaddrs = ::Get_GetAcceptExSockaddrs_FuncPtr(m_soListen); m_pfnDisconnectEx = ::Get_DisconnectEx_FuncPtr(m_soListen); ASSERT(m_pfnAcceptEx); ASSERT(m_pfnGetAcceptExSockaddrs); ASSERT(m_pfnDisconnectEx); isOK = TRUE; } else SetLastError(SE_SOCKET_LISTEN, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ENSURE_ERROR_CANCELLED); } else SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); return isOK; }
BOOL CTcpServer::CreateListenSocket(LPCTSTR pszBindAddress, USHORT usPort) { BOOL isOK = FALSE; m_soListen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(m_soListen != INVALID_SOCKET) { SOCKADDR_IN addr; ::sockaddr_A_2_IN(AF_INET, pszBindAddress, usPort, addr); BOOL bOnOff = (m_dwKeepAliveTime > 0 && m_dwKeepAliveInterval > 0); ::SSO_KeepAliveVals(m_soListen, bOnOff, m_dwKeepAliveTime, m_dwKeepAliveInterval); if(::bind(m_soListen, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN)) != SOCKET_ERROR) { if(FirePrepareListen(m_soListen) != HR_ERROR) { if(::listen(m_soListen, m_dwSocketListenQueue) != SOCKET_ERROR) { m_pfnAcceptEx = ::Get_AcceptEx_FuncPtr(m_soListen); m_pfnGetAcceptExSockaddrs = ::Get_GetAcceptExSockaddrs_FuncPtr(m_soListen); m_pfnDisconnectEx = ::Get_DisconnectEx_FuncPtr(m_soListen); ASSERT(m_pfnAcceptEx); ASSERT(m_pfnGetAcceptExSockaddrs); ASSERT(m_pfnDisconnectEx); isOK = TRUE; } else SetLastError(SE_SOCKET_LISTEN, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_PREPARE, __FUNCTION__, ERROR_CANCELLED); } else SetLastError(SE_SOCKET_BIND, __FUNCTION__, ::WSAGetLastError()); } else SetLastError(SE_SOCKET_CREATE, __FUNCTION__, ::WSAGetLastError()); return isOK; }