Markus Pitha: Frage zur Socketprogrammierung mit C

Hallo,
ich habe versucht einen kleinen Server zu basteln. Immerhin kann er schon eine Login Antwort senden :), aber ich habe mich gefragt, wie man es bewerkstelligen kann, dass der Server weiß, ob jemand seine Verbindung bereits beendet hat oder nicht? Wenn jemand nämlich die Verbindung beendet, bleibt in meinem Fall der Socket auf der Serverseite ewig aktiv. Was kann man dagegen tun? Der Rückgabewert von accept() bringt mich auch nicht weiter. Er kann ja nur -1 bei Fehlern und die Socketnummer beinhalten. Hier der kleine Ausschnitt, der sich um die eingehenden Anfragen kümmert.

while(1)    {
printf("\n Server: accept()...");
if ((new_socket = accept(serversocket, (struct sockaddr *)&clientinfo, &length)) == -1)    {
perror("accept()");
}
printf("Connected with %s on socket %d", inet_ntoa(clientinfo.sin_addr), new_socket);
printf("\nSending Login Message to .... %s", inet_ntoa(clientinfo.sin_addr));
/*Sending a msg to the login user*/
if (send(new_socket, loginmsg, loginlength, 0) == -1)    {
perror("send()");
}
}
close(serversocket);

Markus.

--
sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|
  1. Hi,

    ich habe versucht einen kleinen Server zu basteln.
    Immerhin kann er schon eine Login Antwort senden :), aber ich habe mich gefragt, wie man es bewerkstelligen kann, dass der Server weiß, ob jemand seine Verbindung bereits beendet hat oder nicht? Wenn jemand nämlich die Verbindung beendet, bleibt in meinem Fall der Socket auf der Serverseite ewig aktiv. Was kann man dagegen tun?

    Definiere "ewig".
    Nein, nicht mir, sondern Deinem Server und zwar nach Deinem Gusto.

    Wenn es Unix-Sockets sind schau mal in die FAQ, wenn Du die Gnu-LibC benutzt: info-Datei
    Wenn Du Windows benutzt ... ah nö, da habe ich jetzt keinen Bock drauf, guck gefälligst selber in die Winsock-Anleitungen im Netz ;-)

    so short

    Christoph Zurnieden

    1. Hi,
      Die FAQ hilft mir sicher weiter, danke. ;)

      Markus.

      --
      sh:( fo:| ch:? rl:( br:> n4:( ie:{ mo:) va:) de:] zu:) fl:( ss:| ls:] js:|