client.c

text/x-csrc

Filename: client.c
Type: text/x-csrc
Part: 2
Message: Re: Why is src/test/modules/committs/t/002_standby.pl flaky?
#include <stdio.h>
#include <string.h>

#if defined(_WIN32)
#include <windows.h>
#include <winsock.h>

#pragma comment (lib, "Ws2_32.lib")
#define sleep(s) Sleep((s) * 1000)
#else
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#endif

int main(int argc, char *argv[])
{
    char server_message[2000] = { 0 };
    char client_message[2000] = { 0 };
    
#if defined(_WIN32)
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != NO_ERROR) { printf("WSAStartup failed: %d\n", iResult); return 1; }
#endif

    int socket_desc = socket(AF_INET, SOCK_STREAM, 0);  
    if (socket_desc < 0) { printf("Could not create socket\n"); return -1; }   
    
    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(2000);
    server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
    
    if (connect(socket_desc, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) { printf("Could not connect\n"); return -1; }
    
    printf("Connection to server established. Enter message: ");
    fgets(client_message, sizeof(client_message), stdin);
    
    if (send(socket_desc, client_message, strlen(client_message), 0) < 0) { printf("send() failed\n"); return -1; }
    printf("Sleeping...\n");
    sleep(3);
    if (argc > 1 && strcmp(argv[1], "send_before_recv") == 0)
    {
        int r = send(socket_desc, client_message, strlen(client_message), 0);
        printf("send() returned %d\n", r);
    }
    printf("Calling recv()...\n");
    if (recv(socket_desc, server_message, sizeof(server_message), 0) < 0) { printf("recv() failed\n"); return 1; }
    
    printf("Server message: %s\n", server_message);
    return 0;
}