bool SocketServer::tryBind(unsigned short port, const char * intface) { struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port); if(intface != 0){ if(Ndb_getInAddr(&servaddr.sin_addr, intface)) return false; } const NDB_SOCKET_TYPE sock = my_socket_create(AF_INET, SOCK_STREAM, 0); if (!my_socket_valid(sock)) return false; DBUG_PRINT("info",("NDB_SOCKET: " MY_SOCKET_FORMAT, MY_SOCKET_FORMAT_VALUE(sock))); if (my_socket_reuseaddr(sock, true) == -1) { NDB_CLOSE_SOCKET(sock); return false; } if (my_bind_inet(sock, &servaddr) == -1) { NDB_CLOSE_SOCKET(sock); return false; } NDB_CLOSE_SOCKET(sock); return true; }
bool SocketClient::init() { if (my_socket_valid(m_sockfd)) NDB_CLOSE_SOCKET(m_sockfd); if (m_server_name) { memset(&m_servaddr, 0, sizeof(m_servaddr)); m_servaddr.sin_family = AF_INET; m_servaddr.sin_port = htons(m_port); // Convert ip address presentation format to numeric format if (Ndb_getInAddr(&m_servaddr.sin_addr, m_server_name)) return false; } m_sockfd= my_socket_create(AF_INET, SOCK_STREAM, 0); if (!my_socket_valid(m_sockfd)) { return false; } DBUG_PRINT("info",("NDB_SOCKET: " MY_SOCKET_FORMAT, MY_SOCKET_FORMAT_VALUE(m_sockfd))); return true; }
bool SocketServer::setup(SocketServer::Service * service, unsigned short * port, const char * intface){ DBUG_ENTER("SocketServer::setup"); DBUG_PRINT("enter",("interface=%s, port=%u", intface, *port)); struct sockaddr_in servaddr; memset(&servaddr, 0, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(*port); if(intface != 0){ if(Ndb_getInAddr(&servaddr.sin_addr, intface)) DBUG_RETURN(false); } const NDB_SOCKET_TYPE sock = my_socket_create(AF_INET, SOCK_STREAM, 0); if (!my_socket_valid(sock)) { DBUG_PRINT("error",("socket() - %d - %s", socket_errno, strerror(socket_errno))); DBUG_RETURN(false); } DBUG_PRINT("info",("NDB_SOCKET: " MY_SOCKET_FORMAT, MY_SOCKET_FORMAT_VALUE(sock))); if (my_socket_reuseaddr(sock, true) == -1) { DBUG_PRINT("error",("setsockopt() - %d - %s", errno, strerror(errno))); NDB_CLOSE_SOCKET(sock); DBUG_RETURN(false); } if (my_bind_inet(sock, &servaddr) == -1) { DBUG_PRINT("error",("bind() - %d - %s", socket_errno, strerror(socket_errno))); NDB_CLOSE_SOCKET(sock); DBUG_RETURN(false); } /* Get the port we bound to */ if(my_socket_get_port(sock, port)) { ndbout_c("An error occurred while trying to find out what" " port we bound to. Error: %d - %s", socket_errno, strerror(socket_errno)); my_socket_close(sock); DBUG_RETURN(false); } DBUG_PRINT("info",("bound to %u", *port)); if (my_listen(sock, m_maxSessions > 32 ? 32 : m_maxSessions) == -1) { DBUG_PRINT("error",("listen() - %d - %s", socket_errno, strerror(socket_errno))); my_socket_close(sock); DBUG_RETURN(false); } ServiceInstance i; i.m_socket = sock; i.m_service = service; m_services.push_back(i); // Increase size to allow polling all listening ports m_services_poller.set_max_count(m_services.size()); DBUG_RETURN(true); }