v2rayN Local Port Already in Use: Find the 10808 Conflict and Change the Listening Port

When startup reports a port conflict, use netstat or lsof to identify the process using 10808/10809, then change the local listening port in v2rayN settings and update your system proxy and browser.

At a Glance

This guide is for anyone whose v2rayN core fails to start, whose logs show a bind error, or whose browser still cannot connect after a port change. Check the listening address and port, identify the process using it, then either exit the duplicate instance or choose another local port. Use netstat and PowerShell on Windows, or lsof on macOS and Linux. Finally, update your system proxy, browser, and command-line environment.

First, Confirm the Local Listener Is Failing

v2rayN is a desktop client; the proxy core it launches creates the local listener. Your browser connects to the local proxy endpoint first, then the core forwards traffic according to its routing rules. If the endpoint cannot bind to its port, the request never reaches the remote connection stage. Reimporting subscriptions or switching between VMess and VLESS configurations usually will not resolve the conflict.

Browser request Local listener Route matching Remote connection Response

Open the log panel on the v2rayN main window and note the protocol, listening address, and port in the error line. Both errors below indicate a bind failure, though the wording varies by operating system and core. The log may also include a timestamp, inbound name, or other context.

bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

Cause: Another listener is already using the required address and port on Windows. Fix: Find the PID for the port shown in the log, identify the process, then exit the duplicate instance or change v2rayN's local listening port.

bind: address already in use

Cause: The address and port are already in use on macOS or Linux. Fix: Use lsof to find the listening process, stop the conflicting service, or assign v2rayN a different, unused port.

Windows: Find the Process Listening on a Port

Run the following command in PowerShell or Command Prompt. The netstat results may include both local and remote addresses, so check the full line: the local address must show the target port, the state must be LISTENING, and the last column is the listener's PID. Don't mistake a connection with 10808 in its remote address for the process using the local port.

netstat -ano -p tcp | findstr ":10808"
netstat -ano -p tcp | findstr ":10809"

If there's too much output, use PowerShell to filter by local port and listening state. The second command passes the matching PID to Get-Process and displays the process name.

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object LocalAddress,LocalPort,State,OwningProcess

Get-NetTCPConnection -State Listen -LocalPort 10808,10809 -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty OwningProcess -Unique |
  ForEach-Object { Get-Process -Id $_ }
  1. Exit v2rayN first. Use Exit in the tray menu; closing the main window doesn't necessarily quit the app. Then check the port again.
  2. If the listener disappears: It likely belonged to the current instance. Start just one v2rayN instance again and see if the issue returns. You don't need to terminate the core process directly.
  3. If the listener is still there: In Task Manager, open the Details tab and find the process by PID. Check its executable path and command line. If needed, enable those columns from the column selector.
  4. Identify the owning app before taking action. You can exit a duplicate v2rayN instance normally. Don't force-quit another service you need to keep; changing the current client's port is the better option.

A core process name alone doesn't prove that it's a leftover process: another active instance may have launched the same core. Check the file path, parent process, and running client first. If you don't have permission to query the process path, reopen the terminal with administrator privileges and try again. Don't treat running the client as administrator as a standard fix for port conflicts.

macOS and Linux: Find the Listener with lsof

Run the command below in a terminal. -nP keeps addresses and ports numeric to avoid name resolution; -sTCP:LISTEN shows TCP listeners only. The COMMAND, PID, and NAME columns help identify the process name, process ID, and listening address.

lsof -nP -iTCP:10808 -sTCP:LISTEN
lsof -nP -iTCP:10809 -sTCP:LISTEN

Change v2rayN's Local Listening Port

If the process using the port needs to stay, change the port in v2rayN. Note the current port and system proxy settings first so you can revert if needed. Depending on the interface, the field may be called Local mixed listening port, or SOCKS and HTTP ports may be listed separately. Change the fields that are actually present; don't follow an old guide looking for an HTTP field that isn't there.

  1. Check the New Port

    Use the commands above to check 11808. If your configuration has separate listeners for the two protocols, check 11809 too. An empty result means the port isn't in use right now; it doesn't guarantee another program won't use it later.

  2. Open Settings

    Go to Settings → Parameters Settings → Core Basic Settings on the main window and find the local listening port field. If the section names differ slightly, look for the settings page with the local port and listening address.

  3. Enter the New Port

    For a mixed listener, use 11808. For separate SOCKS and HTTP listeners, use 11808 and 11809, respectively. Change only the local inbound ports, not the remote port in the server editor.

  4. Save and Restart

    Save the settings and wait for the client to apply them. If the logs don't show a restart, exit normally from the tray and start a single instance again. Check the new logs for any bind errors.

  5. Check the Listener Again

    Check the PID listening on 11808 and confirm it belongs to the core launched this time. It's fine if another service is still using the old port, 10808; the important thing is that v2rayN successfully bound to its new port.

Don't edit the client-generated runtime configuration to make a port change permanent. Such files may be regenerated when you switch nodes, save settings, or restart the core. If you use a custom configuration, also check listen, port, and protocol in its inbound settings; otherwise, the client may still load the old inbound even after you change the UI settings.

Update System Proxy and App Proxy Settings

Even after the port change succeeds, your browser may still try the old 127.0.0.1:10809 endpoint. The core is running, but the app can't reach the right proxy. Update each proxy setting instead of continuing to switch nodes.

Proxy endpoint What to check Example change
v2rayN system proxy The current selection under System Proxy in the tray menu and the address it sets Select Clear system proxy, then Set system proxy automatically, and verify the actual address
Browser uses system settings Confirm it really uses the system proxy, not a separate manual proxy rule Make sure the system HTTP proxy points to the HTTP or mixed listener port
Browser-specific proxy Protocol, address, and port in the manual proxy settings Set SOCKS5 to 127.0.0.1:11808; use the actual HTTP or mixed port for HTTP
Command-line tools Environment variables such as HTTP_PROXY, HTTPS_PROXY, and ALL_PROXY Remove the old port; reopen the terminal after changing persistent variables
Other apps Proxy addresses saved separately in download tools and developer tools Update the port in each app so other apps can connect too

The system proxy doesn't override every app's separate settings, and it won't update environment variables in terminals that are already running. On Windows, check the address actually set under Settings → Network & Internet → Proxy. If you're using PAC mode, make sure the PAC file returns the updated proxy port too. For troubleshooting, start by testing a known manual proxy endpoint to reduce variables.

Test the Local Endpoint and Remote Requests in Order

Test local TCP connectivity separately from whether the proxy can complete a request. In Windows PowerShell, first check the new listening port. A TcpTestSucceeded value of True only means something accepted the TCP connection; it doesn't confirm that the node, DNS, TLS, or routing is working. You still need to verify which process is listening.

Test-NetConnection -ComputerName 127.0.0.1 -Port 11808

Next, use curl with an explicitly specified proxy to rule out issues with the system proxy. The example uses SOCKS5, which works with SOCKS or mixed listeners; socks5h sends the target hostname to the proxy for resolution. On Windows PowerShell, run curl.exe; on macOS and Linux, run curl with the same arguments.

curl.exe --proxy socks5h://127.0.0.1:11808 --connect-timeout 10 --max-time 30 -I https://v2rayopenwrt.com/

The 10-second connection timeout and 30-second overall timeout in the example are command options, not performance test results. An HTTP status from one website doesn't prove that every destination is reachable. The goal here is to verify that the request uses the right local endpoint and pinpoint the stage where it fails.

Common Questions and Preventing Recurrence

Why do I still get an error if no process is using the port?

First, make sure you're checking the port shown in the error, not just 10808. If the error says access to the socket is not permitted rather than address already in use, on Windows run netsh interface ipv4 show excludedportrange protocol=tcp to check the system's excluded port ranges. Don't delete system-reserved ranges. Choose a port outside those ranges that isn't in use.

Do I need to reimport the subscription after changing to 11808?

No. The local listening port is the entry point for apps connecting to the proxy; server addresses and remote ports in subscriptions are separate settings. Save the local settings, restart the core, and update your app's proxy settings. Don't change the subscription to fix a local port conflict.

The conflict returns after restarting my computer. How can I fix it permanently?

After rebooting, check the port before manually opening v2rayN to see whether a startup service has claimed it. Check whether two v2rayN instances are set to start automatically. Keep one instance, or assign different ports to services that must run in parallel, then verify the full startup process again.

Do I need to change the UDP port too or turn off the firewall?

First, check whether the log identifies tcp or udp; TCP and UDP use separate port spaces. The commands in this guide primarily identify TCP listeners. If the log clearly reports a UDP bind failure, use Get-NetUDPEndpoint on Windows or an lsof UDP query on macOS and Linux. Don't disable the firewall entirely to fix a bind conflict.

Download the ClientChoose a package for your platform