Question: Does poll give a POLLIN revent when the first TCP segment arrives or after the entire TCP message arrives? If the former is it possible that the first segment of a TCP message is sent, but not the complete message? How would the server handle that read so it won't block forever?

Edit: I've realized the solution to my problem if I wanted to persist with a TCP socket. I might try a SCTP socket instead. Seems to be more in line with how I want it to work.

Answer: 
TCP is stream, not messages. So, pollin can be happened after any amount of data received
Here is example how you can receive e.g. 1000 bytes from socket in conjunction with `poll()`:

```c
char buffer[MAX_MSG_SIZE];
char *p = buffer;
size_t bytes_left = 1000;   // Must be less or equal to MAX_MSG_SIZE

for (;;)
{
    int ret = poll(fds, num_fds, timeout);

    if (ret == -1) {
        // Handle poll() errors here
        // ...
        break;
    }
    if (ret == 0) {
        // Handle timeout here
        // ...
        continue;
    }

    if (fds[0].revents & POLLIN)    // Assume socket descriptor is in fds[0].fd
    {
        ssize_t len = recv(fds[0].fd, p, bytes_left, 0);

        if (len == -1) {
            // Handle recv() errors here
            // ...
        }

        bytes_left -= len;
        p += len;

        if (bytes_left == 0) {
            // Do something with 1000 bytes in buffer
            // ...

            // Read next "message", e.g. 500 bytes
            bytes_left = 500;
            p = buffer;
        }
    }

    // Handle other fds events
    // ...
}

```