Sockets: Eingehende Verbindung ablehnen



  • Hallo

    ich bin gerade dabei, ein Programm zum Port-Forwarding zu schreiben. Es klappt auch alles relativ gut. Nur jetzt bin ich auf folgendes Problem/Frage gestoßen:

    Ist es möglich, eine eingehende Verbindung (auf dem Server-Socket) abzulehnen, so dass der Client-Socket "denkt", der Server-Socket würde nicht existieren?

    Bis jetzt nehme ich select(), um zu prüfen, ob eine Verbindung da ist. Dann nehme ich accept(), um die Verbindung anzunehemen. Aber an dieser Stelle hätte ich gerne auch die Möglichkeit, die Verbindung abzulehnen. (Nämlich dann, wenn versucht wird, Daten an einen Port weiterzuleiten, der gar nicht existiert)

    Danke
    mfG
    Manski



  • Hi Manski, bevor du das erste Mal Daten vom jeweiligen Client annimmst, einfach ein closesocket auf diesen Socket anwenden. Sollte eigendlich funktionieren.



  • Hi Herrmann

    danke für deine Antwort. Nur leider wird das nicht den gewünschten Zweck erfüllen. Denn sobald ich die Verbindung annehme, wird der Client darüber benachrichtigt und sein connect()-Aufruf liefert TRUE zurück und er bekommt erst beim ersten Sende-/Empfangsaufruf mit, dass die Verbindung getrennt wurde. Wenn ich das z.B. für den Firefox mache, sagt er mir: "Das Dokument enthielt keine Daten."

    Noch irgendwelche anderen Vorschläge??? 😕

    mfG
    Manski



  • Manski schrieb:

    so dass der Client-Socket "denkt", der Server-Socket würde nicht existieren?

    Klingt irgendwie nach Paketfilter.

    Ich glaube aber dafür sind Sockets eine oder mehrere Ebenen zu Hoch. Eventuell kannst du das noch mit RAW-Sockets schaffen..mit so einen Falls habe ich mich aber noch nicht beschäftigt. Paketfilter laufen normalerweise auf Treiberebene. Schau dir mal PCAP an: http://www.tcpdump.org/pcap3_man.html (gibts auch für Windows)
    Vielleicht kannst du das ja für dich verwenden.



  • Herrmann schrieb:

    Ich glaube aber dafür sind Sockets eine oder mehrere Ebenen zu Hoch. Eventuell kannst du das noch mit RAW-Sockets schaffen..mit so einen Falls habe ich mich aber noch nicht beschäftigt. Paketfilter laufen normalerweise auf Treiberebene.

    Danke für die Info - mal schaun, ob das was für mich ist. Ansonsten geht's halt net.

    mfG
    Manski


Anmelden zum Antworten