Unix Socket grundlegende Fragen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
cos4
User
Beiträge: 23
Registriert: Freitag 30. November 2007, 21:17

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.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Die Fehlermeldung wird aber nicht von dem gezeigten Code erzeugt, da zumindest Zeile 16 anders aussieht.
MfG
HWK
cos4
User
Beiträge: 23
Registriert: Freitag 30. November 2007, 21:17

Achso dass ist nur weil ich mit den buffer Zahlen ein wenig rumgespielt habe macht aber keinen Unterschied
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Ich wuerde mal sagen, nach dem bind fehlt noch:

Code: Alles auswählen

server.listen(1)
server.accept()
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
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.
cos4
User
Beiträge: 23
Registriert: Freitag 30. November 2007, 21:17

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.
Antworten