Ciao a tutti vi posto il codice che mi sta facendo davvero smadonnare:
L'idea è che il Client fa la write sul socket di 2 interi dopodichè li manda al server che fa la read dei 2 numeri, li somma e fa la write del risultato sul socket da reinviare al client che leggerà il risultato e lo stamperà a schermo.
Il problema è la read del client perchè il client subito dopo la write si mette in ascolto e non riceve il risultato dal server.
Mi potete aiutare? :'(
SERVER:
codice:
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>
#include <signal.h>

int main(int argc, char **argv)
{
    int somma,list,n,conn;
    int recvline[2];
    socklen_t len;

    struct sockaddr_in server,richiesta;

    if((list=socket(PF_INET,SOCK_STREAM,0))<0)
    {
        perror("socket");
        exit(1);
    }

    server.sin_port=htons(1024);
    server.sin_family=PF_INET;
    server.sin_addr.s_addr=htonl(INADDR_ANY);

    if((bind(list,(struct sockaddr*)&server,sizeof(server)))<0)
    {
        perror("bind");
        exit(1);
    }

    if((listen(list,4))<0)
    {
        perror("listen");
        exit(1);
    }

    while(1)
    {
        len=sizeof(richiesta);

        if((conn=accept(list,(struct sockaddr*)NULL,NULL))<0)
        {
            perror("accept");
            exit(1);
        }

        while((n=read(conn,recvline,sizeof(recvline)))>0)
        {
            recvline[n]=0;
        }

        if(n<0)
        {
            fprintf(stderr,"read error \n");
            exit(1);
        }

        int c,i;
        c=recvline[0]+recvline[1];
        puts("");
        printf("INPUT\nx: %d\ny: %d\nRISULTATO\nx+y: %d\n",recvline[0],recvline[1],c);
        //RICEVE I DATI ORA DEVE RISCRIVERLI SUL SOCKET

        recvline[0]=c;

        //ora dobbiamo fare la write sul coscket
        if((write(conn,&c,sizeof(int)))!=sizeof(int))
        {
            printf("write error");
            exit(1);
        }
        puts("write fatta");
    }
    close(conn);
}
CLIENT:
codice:
#include <sys/types.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<time.h>
#include <signal.h>

int main(int argc, char **argv)
{
    int sock,n=0;
    int buffer[2];

    puts("inserisci x ed y");
    scanf("%d %d",&buffer[0],&buffer[1]);
    printf("%d %d \n",buffer[0],buffer[1]);



    if((sock=socket(PF_INET,SOCK_STREAM,0))<0)
    {
        puts("socket error");
        exit(1);
    }

    struct sockaddr_in client;
    client.sin_port=htons(1024);
    client.sin_family=PF_INET;

    if((inet_pton(PF_INET,argv[1],&client.sin_addr))<0)
    {
        puts("errore codifica dati");
        exit(1);
    }

    if(connect(sock,(struct sockaddr*)&client,sizeof(client))==-1)
    {
        puts("connect error");
        exit(1);
    }

    //passaggio parametri a server

    if((write(sock,buffer,sizeof(buffer)))!=sizeof(buffer))
    {
        printf("write error");
        exit(1);
    }

    //ora dobbiamo leggere i dati dal socket
    int ris;
    puts("sono prima della read del client");
    if((n=read(sock,&ris,sizeof(int)))==-1)
    {
        puts("read error");
    }

    puts("");
    printf("risultato: %d\n",ris);
    return 0;
}