.| Autor | Beitrag |
|---|---|
|
000 12.03.2002, 13:46 dp Administrator |
Hi, ich habe ein kleines Problem mit 'nem Server Code, der mehrere clients auf einmal managen soll. Ich beschreibe mal den Fehler: jetzt geb ich bei client #2 was ein, was dann auch bei dem server als debug angezeigt wird. aber ab jetzt kann ich weder neue clients connecten, noch kann ich von client #1 was empfangen .. es scheitert schon am select(). nachdem ich einmal von einem client lese, scheint es so als würde select _nur_ noch den file desc von diesem überwachen. hier mein code: (dass der keine free() und close() weiss ich, ist nur zum test) compilt unter vc++ und gcc < 3 (ka was genau, der der bei suxe 7.3 dabei is), die select() stelle ist farblich markiert #include <stdio.h> #ifdef WIN32 #ifndef WIN32 struct connection_t void start_server(void); int errno; fd_set rfds; void add_connection(int fd) memset(c, 0, sizeof(struct connection_t)); FD_SET(fd, &rfds); if( g_connlist ) /*void rm_connection(struct connection_t *c) free(c); int main(int argc, char **argv) start_server(); void start_server(void) FD_ZERO (&rfds); /* create socket */ maxfd = sd; server.sin_family = AF_INET; /* bind, listen */ addrlen = sizeof(client); FD_SET(sd, &rfds); while( 1 ) send(clisock, teststr, strlen(teststr) + 1, 0); } Dieser Beitrag wurde am 12.03.2002 um 13:47 von Darth Paul bearbeitet. |
|
Profil || Suche |
|
001 12.03.2002, 14:37 Prefect |
Da hat einer nicht weit genug gedacht *tsts* ;) Die übergebenen fdsets werden von select() natürlich verändert - nur dadurch funktionieren das Makro FD_ISSET (unter *nix ist fdset einfach ein Bitfeld, unter Windows ein Array mit Socketnummern). Du muß also direkt vor dem select() ein FD_ZERO und erneutes FD_SET ausführen. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
002 12.03.2002, 15:13 dp Administrator |
uhm *schäm* ok danke, ich werds mal testen. -- |
|
Profil || Suche |
|
003 12.03.2002, 18:05 apfelkorn |
hm... mal ne frage: |
|
Profil || Suche |
|
004 13.03.2002, 13:24 dp Administrator |
ok funzt perfekt, sogar unter win O_o @apfelkorn: ka, ich habs nur zum testen gemacht .. -- |
|
Profil || Suche |
|
005 13.03.2002, 13:26 Prefect |
UDP != verbindungsorientiert SOCK_STREAM ~ verbindungsorientiert == TCP cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
006 14.03.2002, 14:40 apfelkorn |
mh... prefi ist und bleibt cguru -- |
|
Profil || Suche |

