Seite 1 von 1

Unix Socket grundlegende Fragen

Verfasst: Freitag 19. März 2010, 19:34
von cos4
Hallo

bevor euch der Code vollkommen verwirrt, erstmal kurz mein Anliegen. Ich möchte gerne ein Script für einen Browser(uzbl) schreiben. Dazu will ich die Events abfangen und mich daher mit einem Socket einklinken.
Ich kann dem Browser auch per --conect-socket ein Socket zuweisen soweit so gut. Aber nun möchte ich ja erstmal selber ein Socket in Python erzeugen und alles was kommt in die stdout schreiben um zu sehen was da kommt.

Ich hatte ein wenig durchs Netz geguckt und ein paar Tutorials und Beispiele zu einem ersten Versuch zusammen geworfen

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

import socket
import os
socket_addr = "/tmp/uzbl_socket_noscript"

def main():
    if os.path.exists(socket_addr):
        os.remove(socket_addr)

    server= socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    server.bind(socket_addr)
    #client.connect("socket_addr")
    while True:
        answer = server.recv(4096)
        if not answer:
            break
        else:
            print answer
    server.close()
    del server
Das liefert mir aber nen Fehler

Code: Alles auswählen

File "noscript.py", line 27, in <module>
    main()
  File "noscript.py", line 16, in main
    answer = server.recv(1)
socket.error: [Errno 22] Invalid argument
Ich hoffe man kann erkennen was ich gewollt habe.

Das Problem ist, dass sich viele Tutorials auf Inet Sockets beziehen das verwirrt etwas.

Verfasst: Samstag 20. März 2010, 08:46
von HWK
Die Fehlermeldung wird aber nicht von dem gezeigten Code erzeugt, da zumindest Zeile 16 anders aussieht.
MfG
HWK

Verfasst: Samstag 20. März 2010, 09:09
von cos4
Achso dass ist nur weil ich mit den buffer Zahlen ein wenig rumgespielt habe macht aber keinen Unterschied

Verfasst: Samstag 20. März 2010, 10:47
von Rebecca
Ich wuerde mal sagen, nach dem bind fehlt noch:

Code: Alles auswählen

server.listen(1)
server.accept()

Verfasst: Samstag 20. März 2010, 10:50
von BlackJack
@cos4: Von einem Serversocket kann man nichts empfangen, da kann man nur warten dass sich jemand verbindet (`accept()`) und bekommt dann ein anderes Socket und von *dem* kann man dann lesen. Das sind Socket-Grundlagen -- da solltest Du Dir am besten ein Tutorial suchen. Gerne auch für C denn das `socket`-Modul ist nur eine sehr dünne Schicht über die C-API.

Verfasst: Sonntag 21. März 2010, 11:07
von cos4
Danke für die Hilfe. Das Problem ist, dass ich nicht genau weiß, wie das --connect-socket arbeitet(wer ist server wer ist client) muss ich noch mal nach infos suchen.(siehe unten)

Mit den beiden Zeilen gibts jedenfalls schon mal keine Fehlermeldung mehr. Was mich aber wundert die Socketdatei gibts auch nicht, müsste die nicht von meinem Pythonscript angelegt werden?

edit:Also das Script muss Server sein, das Programm ist Client. Ist von daher schon mal ganz richtig.