Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [c]close() errore bind fallita

    eseguendo questo codice praticamente non si chiude la socket e quando vado a far ripartire il server, mi da errore e scrive Bind Fallita : Address already in use
    ma perchè? prima di mandare il segnale chiudo la socket eppure mi da errore...
    qualcuno sa perchè?
    codice:
    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <sys/types.h>
    #include <signal.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,pid_t p,int s){
        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]);
            }
            send(out,inputline,len,0);
            if(inputline[0]=='f' && inputline[1]=='i' && inputline[2]=='n' && inputline[3]=='e'){
                close(s);
                if(close(s)==-1){
                    perror("close fallita");
                    exit(-1);
                }
                kill(p,SIGKILL);
            }
        }
    }
    void maiuscolatore(int in,int out,pid_t p,int s){
        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]);
            }
            send(out,inputline,len,0);
            if(inputline[0]=='F' && inputline[1]=='I' && inputline[2]=='N' && inputline[3]=='E'){
                close(s);
                kill(p,SIGKILL);
            }        
        }
    }
    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(fd,&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");
                    maiuscolatore(fd,fd,getppid(),sock);
                    printf("Chiusa connessione\n");
            }
        }
            else if (c=='-'){
            switch(fork()){
                case -1:
                    perror("Fork fallita");
                    exit(4);
                case 0:
                    printf("Aperta connessione\n");
                    minuscolatore(fd,fd,getppid(),sock);
                    printf("Chiusa connessione\n");
                    fflush(stdout);
            }   
            }
            close(fd);
        }
    }

  2. #2
    Il problema credo sia all'interno delle funzioni esterne...l'errore è nella close() ma non so perchè...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.