text: Q:
  
  transport endpoint is not connected recv socket
  
  i've made a simple program that change a string from lowercase to uppercase and from uppercase to lowercase.
  Server works until start client, after client run server give this error:
  "recv server fallita: Transport endpoint is not connected"
  why? i think that stream closed too soon or not?
  below there is code of server:
  #include <stdlib.h>
  #include <stdio.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <ctype.h>
  #include <sys/socket.h>
  #include <string.h>
  #include <netinet/in.h>
  #define MAXLENGTH 80
  #define SERVERPORT 1313
  
  void minuscolatore (int in,int out){
      char inputline[MAXLENGTH];
      int len,i;
      while((len=recv(in,inputline,MAXLENGTH,0))>0){
          for(i=0;i<len;i++){
              inputline[i]=tolower(inputline[i]);
          }
          if (strcmp(inputline,"fine")==0){
              break;
          }
          send(out,inputline,len,0);
      }
  }
  void maiuscolatore(int in,int out){
      char inputline[MAXLENGTH];
      int len,i;
      while((len=recv(in,inputline,MAXLENGTH,0))>0){
          for(i=0;i<len;i++){
              inputline[i]=toupper(inputline[i]);
          }
          if (strcmp(inputline,"FINE")==0){
              break;
          }
          send(out,inputline,len,0);
      }
  }
  int main(){
      int sock,client_len,fd;
      char c;
      struct sockaddr_in client, server = {AF_INET,htons(SERVERPORT),INADDR_ANY};
      if((sock=socket(AF_INET,SOCK_STREAM,0))==-1){
          perror("Socket fallita");
          exit(1);
      }
      if(bind(sock,(struct sockaddr *)&server,sizeof server)==-1){
          perror("Bind fallita");
          exit(2);
      }
      listen(sock,5);
      while(1){
          client_len=sizeof(client);
          if((fd=accept(sock,(struct sockaddr *)&client,&client_len))<0){
              perror("accept fallita");
              exit(3);
          }
          if (recv(sock,&c,1,0)==-1){
              perror("recv server fallita");
              exit(4);
          }
          if (c=='+'){
          switch(fork()){
              case -1:
                  perror("Fork fallita");
                  exit(4);
              case 0:
                  printf("Aperta connessione\n");
                  send(fd,"Benvenuto al maiuscolatore, minuscolatore\n",27,0);
                  maiuscolatore(fd,fd);
                  printf("Chiusa connessione\n");
          }
      }
          else if (c=='-'){
          switch(fork()){
              case -1:
                  perror("Fork fallita");
                  exit(4);
              case 0:
                  printf("Aperta connessione\n");
                  send(fd,"Benvenuto al maiuscolatore, minuscolatore\n",27,0);
                  minuscolatore(fd,fd);
                  printf("Chiusa connessione\n");
          }   
          }
      }
      close(fd);
  }
  
  and after client:
  #include <stdlib.h>
  #include <stdio.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <ctype.h>
  #include <sys/socket.h>
  #include <string.h>
  #include <netinet/in.h>
  #define MAXLENGTH 80
  #define SERVERPORT 1313
  
  int main(){
      int sockfd;
      struct sockaddr_in server={AF_INET,htons(SERVERPORT),INADDR_ANY};
      int i=0, len;
      char buf[MAXLENGTH],c,d;
      if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
          perror("socket fallita");
          exit(1);
      }
      if (connect(sockfd, (struct sockaddr *) &server,sizeof server)==-1){
          perror("connect fallita");
          exit(2);
      }
      printf("\nDigita una stringa :");
      while((c=getchar())!='\n' && i<MAXLENGTH)
          buf[i++]=c;
  
      buf[i]='\0';
      len=strlen(buf);
      printf("\nScrivi + se vuoi tutto maiuscolo e - se vuoi tutto minuscolo:");
      d=getchar();
      if (send(sockfd,&d,1,0)==-1){
          perror("send d fallita");
          exit(4);
      }
      printf("\nInvio la stringa al server...\n");
      if(send(sockfd,buf,len,0)==-1){
          perror("send fallita");
          exit(4);
      }
      if(recv(sockfd,buf,len,0)>0){
          printf("Ho ricevuto la risposta: %s\n",buf);
      }
      else{
          perror("seconda receive fallita");
          exit(3);
      }
      close(sockfd);
      exit(0);
  }
  
  A:
  
  The fd from your accept is the file handle to recv from, not sock
  
  