PDA

View Full Version : SetSockOpt



DEVJO
25-07-06, 13:12
Hi,

versuche gerade mittels der SetSockOpt die Option SO_RCVTIMEO zu setzen, bekomme allerdings als ReturnCode lediglich -1 egal, was ich probiere. Hat hier jemand eine Ahnung, wie ich diese Option richtig setze?

setsockopt PR 10i 0 ExtProc('setsockopt')
sock_desc 10i 0 value
level 10i 0 value
option_name 10i 0 value
option_value * value
option_length 10i 0 value
*
SO_RCVTIMEO c const(50)
SO_Reuseaddr c const(55)
Sol_Socket C const(-1)
TimetoWait S 10i 0

Eval TimetoWait = 7
Eval ReturnCode = SetSockOpt(As400sid
:Sol_Socket
:SO_RCVTIMEO
:%ADDR(TimetoWait)
:%SIZE(TimetoWait))

Danke schonmal im vorraus.

benedikt.gerlich
25-07-06, 15:41
Hallo,

diese Socketoption funktioniert nur, wenn man in seinem C-Programm vor dem einbinden der socket.h _XOPEN_SOURCE > 520 definiert. Da das hier allerdings kein C-Programm ist wird das schon etwas schwieriger.

Versuch es mal mit ExtProc('qso_setsockopt98')
Diese Funktion wird intern nämlich verwendet, wenn man diese _XOPEN_SOURCE in C definiert.

Ob man diese Funktion jetzt aber einfach zusammen mit den anderen nicht-XOPEN Socketfunktionen verwenden kann weiß ich nicht.

Ansonsten kann man Timeouts beim Lesen des Sockets auch z.B. wunderbar mit der "alarm" Funktion oder "select" realisieren.


Hier noch der Auszug aus dem Handbuch:
SO_RCVTIMEO Set the receive timeout value. This option is not supported unless _XOPEN_SOURCE is defined to be 520 or greater.

Und noch ein Link dazu:
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/apis/_xopen_source.htm

Tschüß
Benedikt