Workers do not directly bind to the port. The master process is the one that binds to the server port and then passes incoming connection handles to workers via IPC, so there is no port conflict.
This is one of the most commonly misunderstood aspects of Node.js clustering. When multiple workers all call server.listen(3000), only the master process actually binds to port 3000 at the OS level. Workers send a request to the master saying they want to listen on port 3000, and the master accepts connections on their behalf, then delegates each connection to one of the workers.
Master process starts and forks N workers
Each worker calls server.listen(3000)
Workers intercept this call and send a message to the master via IPC
Master binds to port 3000 at the OS level (only once)
Client connects — master receives the TCP connection
Master picks a worker (round-robin or OS) and sends the connection handle
Worker accepts the handle and processes the HTTP request