pille710
23-06-2005, 17:06
Moin,
ich habe ein kleines Problem. Und zwar beschäftige ich mich seit ca. 2 Tagen mit BSD Sockets. Ich habe zum Test einen kleinen Server geschrieben, welcher per write() die aktuelle Systemzeit des Rechners auf dem er läuft zum verbunden Host sendet. Nichts spektakuläres also, und funktioniert auch wie gewollt.
Allerdings würde ich ihn jetzt gerne dahingehend erweitern, das er auf 2 Ports auf Verbindungen lauscht, d.h. zum Beispiel auf Port 4000 und 4005. Wenn sich nun beispielsweise jemand auf Port 4000 per Telnet verbindet, soll derjenige die Uhrzeit empfangen. Wenn nun allerdings jemand auf Port 4005 connected, soll der Server selbst einen String entgegennehmen von demjenigen, der sich verbunden hat.
Meine accept() Endlosschleife sieht bisher so aus:
for(;;)
{
if ((newsock = accept_connection(sockfd)) < 0)
{
if (errno == EINTR) continue;
perror("accept");
exit(1);
}
switch(fork())
{
case -1 :
perror("fork");
close(sockfd);
close(newsock);
exit(1);
case 0 :
close(sockfd);
strftime(string, 60, "%H Uhr %M Minuten (%S Sek.): %A, %B, %Y \n", &zeit);
write(newsock, string, 59);
exit(0);
default:
close(newsock);
continue;
}
}
Meine Frage ist jetzt weniger Quellcodespezifisch, als eher "Konzeptbedingt" ;)
Ist es möglich das ich einfach einen zweiten Socket erstelle, ihm mit bind die eigene Adresse zuweise, ihn dann "lauschen" lasse und per If Abfrage in der Endlosschleife auf connects warte, so wie praktisch auch mit "newsock" oben?
Falls ja, stellt sich für mich die Frage wie ich weiterhin mit fork() umgehen kann und wie zwischen den 2 verschiedenen Verbindungen unterschieden werden soll.
Ein kleines Stück Pseudocode o.Ä. würde mir in dem Punkt schon enorm weiterhelfen.
Vielen Dank schonmal im vorraus, ich hoffe es wird halbwegs klar worauf ich hinaus will ;)
Mfg pille.
ich habe ein kleines Problem. Und zwar beschäftige ich mich seit ca. 2 Tagen mit BSD Sockets. Ich habe zum Test einen kleinen Server geschrieben, welcher per write() die aktuelle Systemzeit des Rechners auf dem er läuft zum verbunden Host sendet. Nichts spektakuläres also, und funktioniert auch wie gewollt.
Allerdings würde ich ihn jetzt gerne dahingehend erweitern, das er auf 2 Ports auf Verbindungen lauscht, d.h. zum Beispiel auf Port 4000 und 4005. Wenn sich nun beispielsweise jemand auf Port 4000 per Telnet verbindet, soll derjenige die Uhrzeit empfangen. Wenn nun allerdings jemand auf Port 4005 connected, soll der Server selbst einen String entgegennehmen von demjenigen, der sich verbunden hat.
Meine accept() Endlosschleife sieht bisher so aus:
for(;;)
{
if ((newsock = accept_connection(sockfd)) < 0)
{
if (errno == EINTR) continue;
perror("accept");
exit(1);
}
switch(fork())
{
case -1 :
perror("fork");
close(sockfd);
close(newsock);
exit(1);
case 0 :
close(sockfd);
strftime(string, 60, "%H Uhr %M Minuten (%S Sek.): %A, %B, %Y \n", &zeit);
write(newsock, string, 59);
exit(0);
default:
close(newsock);
continue;
}
}
Meine Frage ist jetzt weniger Quellcodespezifisch, als eher "Konzeptbedingt" ;)
Ist es möglich das ich einfach einen zweiten Socket erstelle, ihm mit bind die eigene Adresse zuweise, ihn dann "lauschen" lasse und per If Abfrage in der Endlosschleife auf connects warte, so wie praktisch auch mit "newsock" oben?
Falls ja, stellt sich für mich die Frage wie ich weiterhin mit fork() umgehen kann und wie zwischen den 2 verschiedenen Verbindungen unterschieden werden soll.
Ein kleines Stück Pseudocode o.Ä. würde mir in dem Punkt schon enorm weiterhelfen.
Vielen Dank schonmal im vorraus, ich hoffe es wird halbwegs klar worauf ich hinaus will ;)
Mfg pille.