{"id":310,"date":"2026-10-13T12:31:15","date_gmt":"2026-10-13T12:31:15","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2012\/02\/13\/perforce-network-troubleshooting-hints\/"},"modified":"2026-10-13T12:31:15","modified_gmt":"2026-10-13T12:31:15","slug":"perforce-network-troubleshooting-hints","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/perforce-network-troubleshooting-hints\/","title":{"rendered":"Perforce Network Troubleshooting: A Practical Workflow for Port, DNS, and Firewall Issues"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><em>Originally published on 2012-02-13; fully revised and updated.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If Perforce clients cannot connect (or connectivity is intermittent), you need to isolate whether the problem is on the server, the network path, name resolution, or endpoint policy. This runbook is for administrators and DevOps engineers who want a fast, repeatable troubleshooting sequence using core commands available on Windows, Linux, and macOS.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2012\/02\/perforce-network-troublesho.png\" alt=\"Perforce network troubleshooting guide\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Quick troubleshooting workflow<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Follow this order so you do not spend time on DNS or routing before confirming that the Perforce server is actually listening and accepting local connections.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Client cannot connect to Perforce] --> B[On server: check port 1666 is listening]\n    B --> C{Listening on expected port}\n    C -- no --> D[Start or reconfigure p4d and P4PORT]\n    C -- yes --> E[Test local connection with p4 info]\n    E --> F{Local test succeeds}\n    F -- no --> D\n    F -- yes --> G[From client: ping and TCP port test]\n    G --> H{TCP port reachable}\n    H -- no --> I[Check firewall and network path]\n    H -- yes --> J[Check DNS resolution]\n    J --> K{Hostname and IP both work}\n    K -- no --> L[Fix DNS or host entry]\n    K -- yes --> M[Investigate intermittent latency or packet loss]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Step-by-step checks from host to network<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1) Confirm the Perforce server is listening on the expected port<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original guidance checks for a listening socket on port 1666 (default in many deployments). If nothing is listening, clients cannot connect regardless of DNS or firewall state.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Linux\/macOS<\/span>\nnetstat -an | grep <span class=\"hljs-number\">1666<\/span>\nss -lntp | grep <span class=\"hljs-number\">1666<\/span>\n\n<span class=\"hljs-comment\"># Windows (Command Prompt)<\/span>\nnetstat -a | findstr <span class=\"hljs-number\">1666<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Look for a <strong>LISTEN<\/strong> state on the Perforce port you expect.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2) Verify local loopback connectivity from the server itself<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This separates server process issues from network path issues.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">p4<\/span> <span class=\"hljs-selector-tag\">-p<\/span> 127<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.1<\/span><span class=\"hljs-selector-pseudo\">:1666<\/span> <span class=\"hljs-selector-tag\">info<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If this fails on the server host, focus on the Perforce service and configuration before testing external clients.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3) Validate P4PORT configuration<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The original post notes that setting <code>P4PORT<\/code> to <code>localhost:1666<\/code> restricts access to local-only connections. Using <code>1666<\/code> makes the service listen on all interfaces.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Windows service context (as shown in the original guidance)<\/span>\np4 set -S Perforce P4PORT\np4 set -S Perforce P4PORT=<span class=\"hljs-number\">1666<\/span>\n\n<span class=\"hljs-comment\"># Linux\/macOS examples<\/span>\nexport P4PORT=<span class=\"hljs-number\">1666<\/span>\np4d -r <span class=\"hljs-string\">\"$P4ROOT\"<\/span> -p <span class=\"hljs-number\">1666<\/span> &#91;other flags]<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">4) Test client reachability (ICMP and TCP)<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">First verify basic network reachability, then verify the actual Perforce TCP port.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># From a client host<\/span>\nping perforce-server\n\n<span class=\"hljs-comment\"># TCP test<\/span>\ntelnet perforce-server <span class=\"hljs-number\">1666<\/span>\n<span class=\"hljs-comment\"># or, if telnet is unavailable:<\/span>\nnc -vz perforce-server <span class=\"hljs-number\">1666<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If ping fails, ICMP may be blocked or routing is broken. If ping works but TCP fails, investigate firewalls, port filters, security groups, or host-based ACLs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5) Check firewall and port filtering policy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Ensure inbound TCP traffic to the Perforce port is allowed on the server side, and that outbound\/return traffic is not blocked.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Allow inbound TCP to port 1666 (or your configured Perforce port).<\/li><li>Verify host firewall rules for the <code>p4d<\/code> process or port-based policy.<\/li><li>On Windows, review Firewall Advanced Settings and Inbound Rules as noted in the original article.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">6) Validate DNS resolution and compare hostname vs IP behavior<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If hostname-based connection fails but direct IP works, the issue is likely DNS resolution or hostname spelling.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-bash\"><span class=\"hljs-selector-tag\">ping<\/span> <span class=\"hljs-selector-tag\">perforce<\/span><span class=\"hljs-selector-class\">.example<\/span><span class=\"hljs-selector-class\">.com<\/span>\n<span class=\"hljs-selector-tag\">nslookup<\/span> <span class=\"hljs-selector-tag\">perforce<\/span><span class=\"hljs-selector-class\">.example<\/span><span class=\"hljs-selector-class\">.com<\/span>\n<span class=\"hljs-selector-tag\">dig<\/span> <span class=\"hljs-selector-tag\">perforce<\/span><span class=\"hljs-selector-class\">.example<\/span><span class=\"hljs-selector-class\">.com<\/span>\n\n# <span class=\"hljs-selector-tag\">Compare<\/span> <span class=\"hljs-selector-tag\">Perforce<\/span> <span class=\"hljs-selector-tag\">client<\/span> <span class=\"hljs-selector-tag\">behavior<\/span>\n<span class=\"hljs-selector-tag\">p4<\/span> <span class=\"hljs-selector-tag\">-p<\/span> <span class=\"hljs-selector-tag\">perforce<\/span><span class=\"hljs-selector-class\">.example<\/span><span class=\"hljs-selector-class\">.com<\/span><span class=\"hljs-selector-pseudo\">:1666<\/span> <span class=\"hljs-selector-tag\">info<\/span>\n<span class=\"hljs-selector-tag\">p4<\/span> <span class=\"hljs-selector-tag\">-p<\/span> 192<span class=\"hljs-selector-class\">.0<\/span><span class=\"hljs-selector-class\">.2<\/span><span class=\"hljs-selector-class\">.10<\/span><span class=\"hljs-selector-pseudo\">:1666<\/span> <span class=\"hljs-selector-tag\">info<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">7) Investigate routing and intermittent network problems<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For intermittent failures, check route consistency, ARP behavior, and hop latency.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\">arp -a\nroute\n\n<span class=\"hljs-comment\"># Path checks<\/span>\ntracert perforce-server   <span class=\"hljs-comment\"># Windows<\/span>\ntraceroute perforce-server  <span class=\"hljs-comment\"># Linux\/macOS<\/span>\n\n<span class=\"hljs-comment\"># Intermittency tools mentioned in original guidance<\/span>\nfping perforce-server<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Command comparison: what each test tells you<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Check<\/th><th>Command example<\/th><th>Success indicates<\/th><th>Failure often indicates<\/th><\/tr><\/thead><tbody><tr><td>Server listening<\/td><td><code>netstat -an | grep 1666<\/code><\/td><td>Perforce is bound to the expected TCP port<\/td><td>Service down or wrong bind configuration<\/td><\/tr><tr><td>Local Perforce handshake<\/td><td><code>p4 -p 127.0.0.1:1666 info<\/code><\/td><td>Server process can accept local client connections<\/td><td>Service\/config\/auth problem on server host<\/td><\/tr><tr><td>Basic reachability<\/td><td><code>ping perforce-server<\/code><\/td><td>Network path exists for ICMP<\/td><td>ICMP blocked or underlying network issue<\/td><\/tr><tr><td>TCP port reachability<\/td><td><code>telnet perforce-server 1666<\/code><\/td><td>Perforce port is reachable from client network<\/td><td>Firewall\/ACL\/NAT\/security policy block<\/td><\/tr><tr><td>Name resolution<\/td><td><code>nslookup perforce.example.com<\/code><\/td><td>Hostname resolves to expected IP<\/td><td>DNS or host entry mismatch<\/td><\/tr><tr><td>Path latency\/hops<\/td><td><code>traceroute perforce-server<\/code><\/td><td>Reasonable route and hop latency<\/td><td>Congestion, routing asymmetry, upstream issues<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Primary reference from original post: <a href=\"http:\/\/kb.perforce.com\/article\/905\" target=\"_blank\" rel=\"noopener\">http:\/\/kb.perforce.com\/article\/905<\/a><br\/>Original article permalink: <a href=\"https:\/\/www.devopsschool.com\/blog\/perforce-network-troubleshooting-hints\/\">https:\/\/www.devopsschool.com\/blog\/perforce-network-troubleshooting-hints\/<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common pitfalls and best practices<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Do not skip local loopback testing; it quickly separates server-side and network-side failures.<\/li><li>Avoid binding only to <code>localhost<\/code> unless local-only access is intentional.<\/li><li>Test both hostname and IP to isolate DNS issues fast.<\/li><li>Document the expected Perforce port and firewall rules in your runbooks.<\/li><li>For intermittent issues, gather repeated path\/latency data before changing server settings.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This guide turns a classic Perforce troubleshooting checklist into a structured workflow you can run quickly during incidents. You will validate server listening state, P4PORT configuration, client connectivity, DNS, firewall rules, and network path health.<\/p>\n","protected":false},"author":1,"featured_media":3853,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[370],"tags":[545,255,2594,2602,2596,373,2595,2600,2603,2601,2597,2598,2599,1028,1509,399,2604,293],"class_list":["post-310","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-perforce","tag-how","tag-issues","tag-network","tag-network-issues","tag-network-troubleshooting","tag-perforce","tag-perforce-network","tag-perforce-network-issue","tag-perforce-network-issue-guide","tag-perforce-network-problem","tag-perforce-network-troubleshooting","tag-perforce-network-troubleshooting-guide","tag-perforce-network-troubleshooting-tutorials","tag-problems","tag-resolve","tag-server","tag-troubleshoot-perforce-network","tag-troubleshooting"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":79168,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/310\/revisions\/79168"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3853"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}