add isPortOpen function