PDA

View Full Version : O-NONBLOCK



horni
08-09-11, 15:25
Hallo Forum,

ich bastel gerade an einer Socket Anbindung und hab eigentlich nur noch ein Problem mit der Blockungs Funktion.
Und das treibt mich gerade in den Wahnsinn......

Ich habe mich dabei ziemlich genau an das Tutorial von Scott Klement gehalten, weils für mich absolutes Neuland ist. Leider bekomme ich bei der Umwandlung des Programms immer den Fehler
"Prototypaufruf kann nicht in einem Ausdruck verwendet
werden, da er keinen Wert zurückgibt".

Definitionen:
D fcntl PR ExtProc('fcntl')
D SocketDesc 10I 0 Value
D Command 10I 0 Value
D Arg 10I 0 Value Options(*NOPASS)

D F_GETFL C CONST(6)
D F_SETFL C CONST(7)

D O_NONBLOCK C CONST(128)
D O_NDELAY C CONST(128)
D FNDELAY C CONST(128)

D flags S 10I 0

Die C-Funktion:
int fcntl (int descriptor, int command, ...);

und die Codierung:
* flags = fcntl(sock: F_GETFL);
flags = flags + O_NONBLOCK;
* if fcntl(sock: F_SETFL: flags) < 0;
msg = 'Blockungsfehler';
ENDIF;

Moniert werden immer die beiden Zeilen mit dem Sternchen davor.

Hat jemand eine Idee was ich hier falsch mache ???

Schon einmal Danke und Grüße
Markus

Robi
08-09-11, 15:32
Hi,
eigendlich ist die fehlermsg doch klar
hier
D fcntl PR ExtProc('fcntl')

fehlt die return länge


also

D fcntl PR 1 ExtProc('fcntl')

Die returngröße muß natürlich passen
Robi

Pikachu
08-09-11, 15:40
D fcntl PR 10I 0 ExtProc('fcntl')
D SocketDesc 10I 0 Value
D Command 10I 0 Value
D Arg 10I 0 Value Options(*NOPASS)


The fcntl() API call (http://www.scottklement.com/rpg/socktut/fcntlapi.html)

horni
08-09-11, 15:46
Hallo an euch beide,

herzlichen Dank, das wars natürlich!

Hätte ich ja durchaus auch drauf kommen können bei genauerem hinsehen :o
Wäre mir aber wahrscheinlich die nächsten 100 Jahre nicht aufgefallen.

Nochmal Danke und allen einen schönen Abend.

Grüße
Markus