J Dub
J Dub

Reputation: 71

C Socket Programming with Polling: How to detect if client hangs up

I am working on a simple C program where there are two source files: server.c and client.c

I connected everything properly with sockets, and I use the poll() function to poll the keyboard for data (as well as a shell connected to a pipe).

I am able to detect when the client uses the ^D and ^C command to know to kill the child process, and exit both client and server terminals.

However, is there a way to detect if the client hangs up (i.e. I explicitly click x on the client terminal tab)? Because right now, the server tab doesn't detect this, and doesn't close. I want to avoid using a timeout

Upvotes: 2

Views: 1063

Answers (1)

Holt Skinner
Holt Skinner

Reputation: 2232

You can continuously probe the client socket with the recv() sys call. It is designed to return 0 when the client disconnects.

while (1) {

  //Get request from client, leave if client quits
  if (recv(client_socket, client_request, sizeof(client_request), 0) == 0) {
    break;
  }
}

OR

// This while condition will fail when recv returns 0, because C
while (recv(client_socket, client_request, sizeof(client_request), 0)) {
 // insert code here
}

Hope this helps 🤓

Upvotes: 1

Related Questions