Socket Programmierung => select()
-
Hallo Leute,
ich will einen TCP Server auf eine SPS implementieren. Dazu liegen mir die notwendigen Socket Funktionen zur Verfügung.
Als Grundlage habe ich mich daran halten wollen:
https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_71/rzab6/xnonblock.htmNun habe ich aber die Funktion select() noch nicht ganz verstanden.
Vorher aber noch einige Fragen:
-
Ich habe eine Socket aufgemacht create(), bind(), listen(), accept() => und habe ein Socket Handle. Wenn nun eine Verbindung angenommen wird via accept(), dann bekommen ich ein ClientHandle zurück. Ist das nun eine weiters Socket??
-
Nun zum Select(). Hier habe ich eine fd_set. liefert mit Select() ne 1, dann prüfe ich ob ich ein weiter Accept() mache, liefert mir Select()> 1 , dann habe ich wartende Client Sockets!? Richtig?
-
Ist die FD_SEet Structure eine art Queue. welche mir die select() Funktion bei jedem aufruf füllt? Oder muss ich selber bei jedem accept() eine ClientSocket anhängen?
-
Ich habe keine Funktionen bzw. Markos wie FD_ISSET?? die müsste ich selbst implementieren, ab ich weiß nicht was die genau prüft.
Ich bin mir generell nicht ganz im klaren wer die FD_SET Struktur mit Daten füttere.. ICH oder die select() Funktion.
Danke für eure Hilfe:)
-
-
- Ja, der Socket auf dem du
listenaufrufst, ist das Einfallstor für Clients sich mit deinem Server zu verbinden. Erfolgreiche Verbindung mit einem Client erzeugt einen neuen Handle.
Die Makros wie
FD_ISSETmüssen von der Library zur Verfügung gestellt werden; du solltest die nicht selbst definieren.
Meine Empfehlung: verwende keinselect, wenn es Alternativen gibt.pollist deutlich einfacher zu verwenden und sollte es auch fast überall geben.
- Ja, der Socket auf dem du
-
Dieser Beitrag wurde gelöscht!
-
Guten Morgen,
leider habe ich keine poll() Funktion . Deswegen muss ich es mit select() machen. Muss ich denn wenn mit accept() eine neue Verbindung liefert, diesen handle manuel in der fd ablegen? und select() durchläuft diese lieste?