listen/recv funktion (SOCKET)



  • hi.

    also ich bin zZ dabei eine art icq clone aufzubauen mit einem freund, was wir uns allerdings fragen ist: die listen funktion muss ja durchgängig laufen -> daher wäre das doch ne relative hohe cpu auslastung oder nicht?

    könnte man es nicht so machen:

    server: beinhaltet die accounts
    client: stellt anfrage an den server
    server: akzeptiert die verbindung
    - es wird kein listen mehr vom server stattfinden für diesen user, es besteht eine dauerhafte verbindung
    - ein listen findet nur noch für die anderen accounts statt

    gibt es event. bessere ansätze?

    und wegen der recv. funktion das selbe, diese muss ja auch ununterbrochen laufen, denn es können ja ständig neue messages ankommen.

    danke schonmal!



  • du könntest ja gelegentlich abfragen, ob etwas geschehen ist..

    ein server braucht ein listen um nachrichten zu empfangen und dann weiterzugeben

    wie stellst du dir das vor ohne diese routine? oma-chat?



  • die funktion select() benutzen:
    http://www.c-worker.ch/tuts/select.html



  • Ja, also es ist so.
    Wenn du einen blocking socket hast, dann wartet die listen-Funktion darauf, dass eine Anfrage kommt und verbraucht dabei keine CPU-Last.

    Wegen der recv-Funktion ist es wirklich der Weg mit select().
    Dabei kriegst du eine Struktur geliefert aus der du über Umwege die Info kriegst, ob neue Daten verfügbar sind.



  • Server werden multithreaded gemacht.. ein Thread macht immer listen (keine CPU last - Netzwerkkarte macht das) und wenn ein connect kommt wird die Connection in einen thread ausgelagert, sodass der mainloop wieder lsiten kann



  • Gast081234 schrieb:

    Server werden multithreaded gemacht.. ein Thread macht immer listen (keine CPU last - Netzwerkkarte macht das) und wenn ein connect kommt wird die Connection in einen thread ausgelagert, sodass der mainloop wieder lsiten kann

    Das erzeugt zu viele Threads.


Log in to reply