Pythonfrage: setblocking() ? recv()?



  • recv(bytes)
    wartet ja bis wirklich ALLE <bytes> Bytes empfangen wurden. Deswegen funkt dieses prog net gescheit. Mit setblocking(0)
    hab ich den socket auf non-blocking gesetzt und auch die exception angefangen, aber es wartet mmer noch bis alle <bytes>
    Byes empfangen wurden, in meinem fall 4096.

    import socket, thread
    
    def recv_and_output(args):
    	while 1:
    		try:
    			buf = args.recv(4096)
    			if not buf:
    				break
    			print buf
    
    		except socket.error, (errno, string):
    			pass
    
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)
    sock.setblocking(0)
    try:
    	sock.connect(('pop.gmx.net', 110))
    except socket.error:
    	pass
    
    thread.start_new_thread(recv_and_output, (sock,))
    
    while 1:
    	buf = raw_input()
    	if not sock.send(buf):
    		break
    
    sock.close()
    

    Warum funkt das nicht? In C hatte ich keine probleme, hier in python schon.
    kann mir jemand helfen? Ich möchte, dass recv(4096) nicht wartet bis 4096 bytes eingelesen werden, sondern dass soviele bytes eingelesen werden, wie zZ vorhanden sind, was aber eine maximalgrösse von 4096 betragen darf



  • Hat deine Maschine zufällig eine Celeron-CPU? Damit hat Python nämlich generell Probleme, u.a. funktionieren die Sockets mit diesen Prozessoren nicht richtig...



  • Würden die Moderatoren bitte diesen Thread von Müll befreien? Danke.

    BACK TO TOPIC: Hat da jemand eine Idee?


Anmelden zum Antworten