Re: OT: telnet linemode

From: Oliver Fromme <olli(at)dorifer.heim3.tu-clausthal.de>
Date: Sun, 24 Oct 1999 16:36:13 +0200 (CEST)

Alexander Langer wrote in list.de-bsd-chat:
> Das laeuft allerdings nicht, wenn ich
>
> write(sock, "\255\253\34\0", 4) mache.

Was nicht weiter verwundert. Du mußt natürlich den Rückgabe-
wert von write() prüfen und gegebenenfalls das, was noch nicht
gesendet wurde, erneut senden. Bei write() auf einen Socket
ist nämlich nicht garantiert, daß alle Bytes geschrieben wer-
den, wenn kein Fehler auftritt (bei write() in eine Datei ist
das garantiert, sofern man kein non-blocking I/O benutzt).

Also etwa so:

   char *data = "\255\253\34\0";
   int written = 0;
   while (written < 4)
           written += write(sock, data + written, 4 - written);

In dem Beispiel fehlt die Fehlerbehandlung (write() kann ja
auch -1 liefern), aber das ist ja dann auch nicht mehr weiter
schwer.

> Aus irgend einem Grund, der mir nicht klar ist, muss ich das byteweise
> (total unlogisch!) in networkorder (ein byte in network order...
> wozu?)
> konvertieren:

Das mit dem networkorder konvertieren ist bei Bytes völlig
überflüssig, wie Du ja auch selbst bemerktest. Der Punkt ist,
daß Du dann byteweise schreibst (mit jedem write() nur ein
Byte), und das haut immer hin, sofern kein Fehler auftritt und
Du kein non-blocking I/O verwendest.

> Drollig.

"Seltsam? Aber so steht es geschrieben..."

Gruß
   Oliver

-- 
Oliver Fromme, Leibnizstr. 18/61, 38678 Clausthal, Germany
(Info: finger userinfo:olli(at)dorifer.heim3.tu-clausthal.de)
"In jedem Stück Kohle wartet ein Diamant auf seine Geburt"
                                         (Terry Pratchett)
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-chat" in the body of the message
Received on Sun 24 Oct 1999 - 16:36:27 CEST

search this site