Skip to content
Advertisement

Is it possible to unlisten on a socket?

Is it possible to unlisten on a socket after you have called listen(fd, backlog)?

Edit: My mistake for not making myself clear. I’d like to be able to temporarily unlisten on the socket. Calling close() will leave the socket in the M2LS state and prevent me from reopening it (or worse, some nefarious program could bind to that socket)

Temporarily unlistening would be a way (maybe not the best way) to signal to an upstream load balancer that this app couldn’t accept any more requests for the moment

Advertisement

Answer

Some socket libraries allow you to specifically reject incoming connections. For example: GNU’s CommonC++: TCPsocket Class has a reject method.

BSD Sockets doesn’t have this functionality. You can accept the connection and then immediately close it, while leaving the socket open:

while (running) {

  int i32ConnectFD = accept(i32SocketFD, NULL, NULL);
  while (noConnectionsPlease) {
    shutdown(i32ConnectFD, 2);
    close(i32ConnectFD);
    break;
  }

}
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement