How to free stuck server ports? - node.js

I'm fairly sure that this is a bug in node v0.10.18, but it has created a pollution on my machine which I don't know how to clear.
I have this simple tcp server (coffee) script:
net = require 'net'
server = net.createServer ->
server.listen 'localhost:4545'
when I run it using coffee z.coffee and then press Ctrl+C to interrupt it, I am unable to run it again on the same port due to EADDRINUSE exception. The process repeats on different ports with the same results.
I am aware of other answers about a similar issue, but they aren't able to solve mine because even restarting the machine (osx ml) still leaves the port blocked. Obviously, ps -A | grep node shows nothing as well.
What can I do to free up the stuck ports again?
Edit
Here is an abstract of the comments below. It seems that node uses SO_REUSEADDR be default, so TIME_WAIT should not be the issue, especially since the ports have been stuck for over an hour. Neither netstat nor lsof as root show anything using the ports, and neither multiple reboots, nor killing all but essential programs helped the issue resolve. There is no VPN or firewall.

https://github.com/joyent/node/blob/3d4c663ee68326990e0732a4aa76445688e1064e/lib/net.js#L1159
You are passing invalid arguments to server.listen. It is interpreting your string as a unix domain socket filesystem path.
This program works fine and can be killed and restarted immediately.
net = require "net"
server = net.createServer ->
console.log "connection"
server.listen 1337, "127.0.0.1"
Pass correct arguments to server.listen and all is well.

Related

django not accessible from another computer

followed instructions here to create my first django web sever. Haven't done any major customization yet, except.
Setup settings.py:
ALLOWED_HOSTS = ['192.168.1.111', 'localhost', '127.0.0.1']
Started django from cmd prompt
python manage.py runserver 0.0.0.0:8080
All the three url link works on this local machine where django is installed:
http://127.0.0.1:8080/, http://localhost:8080/, http://192.168.1.111:8080/
I then went onto Windows Firewall settings to include 8080 as an inbound rule:
My problem is http://192.168.1.111:8080/ does throw an exception when accessed from another computer (in the same network, IP being 192.168.1.77). Error is "Site cannot be reached, took too long to respond".
I am not able to figure out what am I doing wrong. I am certain its a firewall issue. Turned off windows firewall on 192.168.1.111 and it worked from 192.168.1.77. Question still remains - How do I make it work with firewall on on 192.168.1.111.
My python version is 3.9 and django version is 3.2. FYI - I moved to 8080 just for kicks. I had same issue with 8000.
Two things worth noticing:
(1) 192.168.1.111:8080 does throw a "Not secure connection" warning on the primary machine (where django is installed)
(2) netstat seems OK too:
C:\Windows\system32>netstat -ab
Active Connections
.
.
[postgres.exe]
TCP 0.0.0.0:7680 DEVSERVER:0 LISTENING
Can not obtain ownership information
TCP 0.0.0.0:8080 DEVSERVER:0 LISTENING
[python3.9.exe]
TCP 0.0.0.0:49664 DEVSERVER:0 LISTENING
.
.
Can not obtain ownership information
TCP 192.168.1.111:8080 DEVSERVER:50515 ESTABLISHED
[python3.9.exe]
TCP 192.168.1.111:49800 52.226.139.121:https ESTABLISHED
[SearchApp.exe]
TCP 192.168.1.111:50502 52.182.141.63:https TIME_WAIT
TCP 192.168.1.111:50515 DEVSERVER:8080 ESTABLISHED
.
.
C:\Windows\system32>
192.168.1.111:8080 just doesn't seem to work from any computer within the network. Tried from 192.168.1.77 (windows/chrome) and 192.168.1.75(windows/firefox)
OK.. so it was a firewall issue. Apparently, there was another outbound rule with python.exe that was override=True and blocking Public or Private UDP or TCP. I don't even remember. I just deleted all TCP rule relating to python and just kept one (noted in my question above). Its working now

Unable to access node server running on specific port from other machine

I am running node server running react application.server is run by webpack. Server is running on 10.121.45.23:3005. I tried opening the application on other machine but page displays connection timed out. I have tried following things to resolve the issue, but nothing helped.
ping 10.121.45.23 from another machine. It is successful.
On server, netstat -ano. I am able to see 10.121.45.23:3005 listening. No loopback address was there as mentioned in many answers on Stack Overflow.
On another machine,telnet 10.121.45.23 3005. It fails and say cannot connect on port 3005. Telnet to some other port on which java is running, is successful. It fails only for node.js server.
So my problems are:
telnet is not working to that port.
Not able to open application on other machine's browser.
Am I missing any checks?
Sounds like you've tested quiet a bit. Have you tried another port, just in case there's a firewall or something?
Also, try explicitly telling webpack to listen on the all-hosts address 0.0.0.0
webpack-dev-server --port 9000 --host 0.0.0.0

Binding IPv4 and IPv6 socket failure

I installed a license server for a software and run this server on a Linux machine. The execution of the license server is something like:
./exefile -logfile log -loglevel 4
where I ask all log info to be written in the file named log.
Everything is running smoothly but when checking the file log, I see the error messages:
"Binding IPv4 socket" "Failure. Socket 16286 probably already in use"
"Binding IPv6 socket" "Failure. Socket 16287 probably already in use"
It seems that this error makes it impossible for the server to record the ip addresses of the machines who (successfully) run the program but I cannot understand the message or find how to solve this error...
Any idea ?
Thanks.
Ok, so to sum up, thanks to Marc's comments I was able to see that the first run of the license server created a process that was using sockets 16286 and 16287 using the command:
netstat -ap
After killing this process and restarting the license server, everything works well.

Error: listen EADDRINUSE when trying to run an Express.js application?

When I try to run my application an Express.js server, the first time with a new port works fine, but then when I try to run it again on that port, I get the "Error: listen EADDRINUSE" error.
I already tried killing all the possible node/gulp processes, also, checked netstat and I do not see port 8080 being used by anything.
What could be the culprit?
This usually happens if the node process is still running your app when you go to run it again. Express will try to bind to the same port but it's already being use by the last node instance you created.
Kill all node processes and try again.
I know that this post is very old. But right now I saw something.
When I was in the same situation as you are in, I opened the console in my browser and I can see some errors. When I solved those errors, everything works fine.

node.js and npm has no network access in windows 7 64 bit ultimate

NOTE: to anyone else who has this problem, I tried all suggestions and all research. In the end I formatted the hard drive and reinstalled windows. Even though it was a fresh install from the start some windows installations just appear to not work at all with node. As far as I know this is the only solution.
So to start with, I already found the similar question:
Basic Node.js examples not working on Windows 7 which seems to be the same issue but there is no solution. I have also found forum posts online with no solutions but many people posting the same issues.
Node.exe and npm both appear to have no network access. npm install sends the get requests and never get a response. Node scripts that go to access a mongodb never send the connection request. I copied this code from my old machine to my new one. It was the first thing i put on the new machine. The old machine was running windows 7 64 home premium and the new one windows 7 64 ultimate. I've tried all compatibility modes, running as administrator, disabling windows firewall, there is no antivirus yet, i uninstalled/reinstalled, and I've tried changing the versions even though the version from old computer to new are the same. I've searched stackoverflow and the internet and have found others with the problem but no solutions. I have a virtual box ubuntu vm that can run node successfully however I would like to be able to run it without a vm if possible and I can't seem to find any cause of the problems. Even OEM software between the two computers are nearly identical since the old was an alienware m15x and the new is an m14x. Any help is appreciated.
edit:
I'm using the latest version currently (0.6.10). After running npm install and having it hang, i used netstat and got the following results under node.exe:
[node.exe]
TCP 10.20.21.225:49690 ec2-107-20-159-167.compute-1.amazonaws.com:https ESTABLISHED
[node.exe]
TCP 10.20.21.225:49691 nuq04s08-in-f31.1e100.net:https TIME_WAIT
TCP 10.20.21.225:49692 fa-in-f94.1e100.net:https TIME_WAIT
TCP 10.20.21.225:49693 nuq04s08-in-f19.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49696 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49702 nuq04s08-in-f6.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49703 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49704 nuq04s08-in-f25.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49706 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49707 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49708 nuq04s08-in-f26.1e100.net:http TIME_WAIT
TCP 10.20.21.225:49709 nuq04s08-in-f26.1e100.net:http TIME_WAIT
Now when I run the example server on the node.js homepage, I cannot get the hello world in the browser however the connection is in netstat:
[node.exe]
TCP 127.0.0.1:1337 Robbie-PC:49805 ESTABLISHED
[node.exe]
TCP 127.0.0.1:7789 Robbie-PC:49158 ESTABLISHED
but when i wait a little while it changes to:
[node.exe]
TCP 127.0.0.1:1337 Robbie-PC:49805 CLOSE_WAIT
[node.exe]
TCP 127.0.0.1:7789 Robbie-PC:49158 ESTABLISHED
edit 2:
so I tried disabling all other connections.. no luck. Then I tried to use the debugger in eclipse, even eclipse couldn't find the vm's debugger broadcasting on port 5858. It literally just has no connection. So unless someone finally has any other ideas aside from wiping the hard drive and reinstalling windows, then I think this computer is going back to alienware as DOA. lets hope the next one doesn't have this problem. Thanks to all those who suggested things in the comments and to everyone who attempted to investigate a solution for me.
If you are behind a corporate network which probably needs proxy configuration on node to be setup. It runs something like this
npm config set proxy http://proxy.company.com:8080
npm config set https-proxy http://proxy.company.com:8080
Replace the proxy company name to whatever your network uses.
With the same OS I don't have this problem, but I already have problems downloading some packages (I wanted node mysql). In order to fix that I had to download the source from github, extract it in the node_modules repository and to rename it as "mysql".
Now I can make var mysql = require('mysql');
Maybe even try cygwin. Its a step back from both pure virtual Linux, and from getting it to run on Windows 7. Personally I have both Cygwin and Windows 7 installs of node.js on 64 bit (not ultimate though).
I just had to install node to a directory outside of 'program files' due to write protection and security settings. Still have to run the command console as administrator though to make sure all things work. Cygwin has none of these issues.

Resources