Hvordan bruges GetSockOpt og SetSockOpt

Tags:    delphi

Hej

Jeg kæmper med at finde ud af hvordan GetSockOpt og SetSockOpt skal bruges i Delphi 7 og Indy 9.

Jeg har prøvet mange forskellige ting men uden held, bl.a. nedestående kode for SetSockOpt der compileres fint men giver Access Violation ved kørsel.

Fold kodeboks ind/udKode 


GetSockOpt kan jeg slet ikke finde ud af hvordan den sættes på min IdTelnet.

Mik D



7 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
hov. der står = og ikke :=

Jeg mente at du skulle teste at alle de objekter du referer til rent faktisk er allokerede :)

ps. hvis du ikke har grebet den..
if IdTelnet0 = nil then
ShowMessage('Telnet komponentet er ikke allokeret')
else if IdTelnet0.Socket = nil then
ShowMessage('Telnet socket er ikke allokeret')
else if IdTelnet0.Socket.Binding = nil then
ShowMessage('Telnet socket binding er ikke allokeret');



Prøv og se om enten
IdTelnet0.Socket = nil
eller IdTelnet0.Socket.Binding = nil
eller IdTelnet0.Socket.Binding.SetSockOpt = nil

Det ser ud soom om at du bruger funktionen korrekt så det er sikkert de andre ting som er årsagen til fejlen



Hej Jeppe

IdTelnet0.Socket = nil og IdTelnet0.Socket.Binding = nil

giver "Cannot assign to read-only property"

IdTelnet0.Socket.Binding.SetSockOpt = nil

giver "Not enough actual parameters" så der forventes at alle fire parametre kommer med.

Så desværre ingen hul igennem med de tricks.

Jeg har godt nok prøvet mange ting men dette socket-stas er vist på ydersiden af min viden :-(

Mik D



Hej Jeppe

Ups, det kan nok gøre en forskel.

IdTelnet0 = nil -> OK, passeres
IdTelnet0.Socket = nil -> ikke allokeret
IdTelnet0.Socket.Binding = nil -> access violation

Uden at vide hvad jeg nu skal forsøge så lyder det som om at jeg er kommet nærmere - et eller andet.

Mik D



Tja det ser jo ud som om at der ikke er lavet en socket. Er du sikker på at forbindelsen er åben når du laver det kald?

Kan jeg se koden du bruger til at lave/starte IdTelnet0?



Hej Jeppe

Jeg er super glad for din hjælp!

Vi kommer tættere på.

if-nil koden var lagt før connect. Efter connect kører den fejlfrit igennem:

Fold kodeboks ind/udKode 

OK, det tyder så på at det var SetSockOpt. Men hvordan får jeg fat i GetSockOpt?

Hvorfor alt dette pilleri? Jeg har en telnet client der nogle gange bliver brugt på en satellit, mobil eller dårlig dial-up og de metoder er plaget af hyppigere udfald.

Det skulle gerne være sådan at SO_RCVBUF og SO_SNDBUF fra http://msdn.microsoft.com/en-us/library/ms738544(VS.85).aspx er store nok til at håndtere de delays/congestions der kan opstå når forbindelsen er lidt gummi-agtig.

Det undere mig dog at IdTelnet.RecvBufferSize og ~SendBufferSize ikke er de samme som SO_RCVBUF og SO_SNDBUF - hvilket jeg tror i øjeblikket.

På et eller andet tidspunkt kan det også være at jeg skal pille ved nogle timing-parametre i TCP/IP socket'en.



Indlæg senest redigeret d. 22.07.2008 19:25 af Bruger #4912
Hej

Så skulle der være hul igennem til GetSockOpt også.

Fold kodeboks ind/udKode 


Mik D



Indlæg senest redigeret d. 23.07.2008 15:21 af Bruger #4912
t