My problem is that I can't seem to perform error checking correctly. If I suddenly disconnect the client, I'd expect the server to return an error of some sort. But in fact, it doesn't, and simply loops forever rapidly.
Here is the loop for the server:
Expand|Select|Wrap|Line Numbers
- if ((client_fd = accept(server_sock, (sockaddr*) &m_addr, (socklen_t*) &addr_length)) != -1) {
- pollfd pfd;
- pfd.fd = client_fd;
- pfd.events = POLLIN;
- pfd.revents = 0;
- int timeout = -1;
- int retval;
- while (true) {
- if ((retval = poll(&pfd, 1, timeout)) > 0) {
- if (pfd.revents & POLLERR) {
- printf("An error occurred.\n");
- break;
- }
- if (pfd.revents & POLLHUP) {
- printf("A hang up occurred.\n");
- break;
- }
- if (pfd.revents & POLLIN) {
- if (recv(client_fd, buffer, MAX_RECV, 0) != -1) {
- printf("Received: %s\n", buffer);
- *buffer = '\0';
- }
- else perror("recv");
- }
- }
- else {
- perror("poll");
- break;
- }
- }
- }
Expand|Select|Wrap|Line Numbers
- char* req = "Hello from the client";
- int len = strlen(req);
- while (true) {
- if (send(client_fd, req, len, 0) == -1) perror("send");
- sleep(5);
- }