#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <errno.h>
#include <sys/time.h>

#define PORT 9090
#define BUFFER_SIZE 1024

int main() {
    int sock;
    struct sockaddr_in serv_addr;
    char buffer[BUFFER_SIZE];

    // 1. Create socket
    sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock < 0) { perror("Socket creation error"); return -1; }

    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(PORT);
    inet_pton(AF_INET, "192.168.2.1", &serv_addr.sin_addr);

    // 2. Connect to server
    if (connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) { perror("Connection Failed"); return -1; }
    printf("[Client] Connected to server\n");

    // 3. Set receive timeout = 5s
    struct timeval tv = {5, 0};
    setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));

    // 4. Attempt to receive (server sends nothing → timeout)
    int valread = recv(sock, buffer, BUFFER_SIZE, 0);
    if (valread < 0) {
        if (errno == EWOULDBLOCK || errno == EAGAIN)
            printf("[Client] Receive timeout occurred\n");
        else
            perror("Recv failed");
    } else {
        buffer[valread] = '\0';
        printf("[Client] Received: %s\n", buffer);
    }

    close(sock);
    return 0;
}

