socket() blockiert

Dieses Thema im Forum "C/C++" wurde erstellt von supervisor, 26.07.2008.

  1. #1 supervisor, 26.07.2008
    supervisor

    supervisor Eroberer

    Dabei seit:
    15.06.2008
    Beiträge:
    61
    Zustimmungen:
    0
    Ort:
    Bayern
    hallo!

    ich hab jetzt mit netzwerkprogrammierung angefangen, und hab versucht n kleinen 'server' zu schreiben, der im Grunde nur auf verbindungen wartet und wenn eine kommt was auf der shell ausgibt. das Problem: es funktioniert irgendwie nich. ich hab jetzt seit ca. 3 stunden versucht, das problem zu beseitigen, konnte aber nur rausfinden, dass es am aufruf von socket() liegt. da bleibt es zwar hängen, der prozess bleibt aber weiter am leben.

    wahrscheinlich hab ich eh blos nen dummen anfängerfehler gemacht, also hier is der code:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <sys/wait.h>
    #include <signal.h>
    
    int main()
    {
    	int db;
    	
    	int sockfd;
    	struct sockaddr_in hostaddr;
    	struct sockaddr_in clientaddr;
    	socklen_t size;
    	
    	sockfd = socket(PF_INET, SOCK_STREAM, 0);
    	
    	printf("%d", sockfd);
    	
    	hostaddr.sin_family = AF_INET;
    	hostaddr.sin_port = htons(5000);
    	hostaddr.sin_addr.s_addr = INADDR_ANY;
    	memset(hostaddr.sin_zero, '\0', sizeof hostaddr.sin_zero);
    	
    	db = bind(sockfd, (struct sockaddr *)&hostaddr, sizeof hostaddr);
    	printf("%d", db);
    	
    	db = listen(sockfd, 10);
    	printf("%d", db);
    	
    	while(1)
    	{
    		int new_fd = accept(sockfd, (struct sockaddr *)&clientaddr, &size);
    		printf("Verbindung angenommen");
    	}
    }
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bitmuncher, 26.07.2008
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Mit ein wenig Error-Handling lassen sich solche Probleme zumeist schneller beheben:
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <sys/wait.h>
    #include <signal.h>
    
    int main()
    {
      int db;
    
      int sockfd;
      struct sockaddr_in hostaddr;
      struct sockaddr_in clientaddr;
      socklen_t size;
      int new_fd;
    
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
      if(sockfd < 0) {
        perror("socket");
        exit(1);
      }
    
      printf("%d\r\n", sockfd);
    
      hostaddr.sin_family = AF_INET;
      hostaddr.sin_port = htons(5000);
      hostaddr.sin_addr.s_addr = INADDR_ANY;
    
      if(bind(sockfd, (struct sockaddr *)&hostaddr, sizeof hostaddr) < 0) {
        perror("bind");
        exit(1);
      }
    
      if(listen(sockfd, 10) < 0) {
        perror("listen");
        exit(1);
      }
    
    
      while(1)
        {
          new_fd = accept(sockfd, (struct sockaddr *)&clientaddr, &size);
          if(new_fd < 0) {
            perror("accept");
            exit(1);
          }
          printf("Verbindung angenommen\r\n");
          close(new_fd);
        }
      close(sockfd);
    }
    
    
    Sonst helfen auch die Programme strace und ltrace weiter, um den Programmfluss nachzuvollziehen und zu sehen wo er stecken bleibt.
     
Thema:

socket() blockiert

Die Seite wird geladen...

socket() blockiert - Ähnliche Themen

  1. Verhaegen: ARM blockiert freien Treiber für Mali

    Verhaegen: ARM blockiert freien Treiber für Mali: Luc Verhaegen, Entwickler des freien Mali-Grafiktreibers »Lima«, kritisiert ARM und fordert das Unternehmen auf, endlich für einen freien Treiber...
  2. Firestarter - google.tld blockiert - Rückgängig machen unmöglich

    Firestarter - google.tld blockiert - Rückgängig machen unmöglich: [erledigt]Firestarter - google.tld blockiert - Rückgängig machen unmöglich Hallo, ich habe mit Firestarter die letzten Tage ein wenig...
  3. Anzahl blockierter Signale

    Anzahl blockierter Signale: Hallo, mit sigpending() kann man ja die Menge der blockierten Signale erfragen und mit sigismember() ob ein bestimmtes Signal in dieser...
  4. lastfm blockiert Adept Manager und Firefox, help pls

    lastfm blockiert Adept Manager und Firefox, help pls: Hallo erstmal :) Bin eher der Anfänger in Sachen Linux, also schon mal sorry für eventuelle Offensichtlichkeiten^^ Da der lastfm-client seit...
  5. quake 3 Sound Problem (Audioausgabe blockiert von Mediaplayer)

    quake 3 Sound Problem (Audioausgabe blockiert von Mediaplayer): Moin liebes Unixboard Hm. Also ich will Quake 3 mit Spielsounds spielen und dabei gleichzeitig Musik über einen Mediaplayer hören (im...