2009-10-20 7 views
1

Je suis en train d'exécuter mon programme de serveur, mais je continue à obtenir cette erreur:Bind: Adresse déjà utilisée

erreur sur la liaison: Adresse déjà utilisée

int main(int argc, char *argv[]){ 

     if (argc < 6){ 
      printf("usage: stringSearcher <filename> <stringLength> <searchLength> <nChildren> <nThreads> <blockSize>\n"); 
      exit(0); 
     } 

     char* fileName = argv[1]; 
     int stringLen = atoi(argv[2]); 
     int searchLen = atoi(argv[3]); 
     nChildren = atoi(argv[4]); 
     if (nChildren == 0) 
      nChildren = 1; 
     int nThreads = atoi(argv[5]); 
     int blockSize = atoi(argv[6]); 
     int childNo = 0; 

    //Opens new socket 
     int sockfd; 
     sockfd = socket(AF_INET, SOCK_STREAM, 0); 

     if (sockfd < 0){ 
     perror("ERROR opening socket"); 
     exit(0); 
     } 



    int newsockfd, portno, clilen; 
    struct sockaddr_in serv_addr, cli_addr; 
    int n; 

    portno = 5000; 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = INADDR_ANY; 
    serv_addr.sin_port = htons(portno); 

    int opt = 1; 
    setsockopt(1, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); 

    if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0){ 
    perror("ERROR on binding\n"); 
    exit(1); 
    } 

Répondre

7
setsockopt(1, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); 

1er argument doit être sockfd et non '1'

0

un excellent outil pour le développement de winsock est TCPView. il est facile de voir quel processus écoute sur quel port, état de la socket, etc