Your read/receive call most likely blocks because you order to read/receive more bytes than the answer sent is long.
For testing purpose do something like this:
int fd = -1;
/* setup fd */
char buffer[1024] = {0};
ssize_t size_buffer = sizeof(buffer) - 1;
size_t size_read_total = 0;
ssize_t size_read = 0;
while (size_buffer > size_read_total)
{
size_read = read(fd, buffer + size_read_total, 1); /* Wait until exactly one byte had been read. */
if (-1 = size_read)
{
if (EINTR == errno)
{
continue;
}
if ((EAGAIN == errno) || (EWOULDBLOCK == errno))
{
continue;
}
break; /* Fatal error */
}
else (0 == size_read)
{
break; /* Connection closed by sending side. */
}
size_read_total += size_read;
}
if (-1 == size_read)
{
perror("read() failed");
}
else
{
printf("Received %zd bytes as: '%s'\n", size_read_total, buffer);
}