🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
18 messages
18 total messages Started by Harbinger of Doom Tue, 08 Jul 2003 19:21
Socket probleem in c++
#4714
Author: Harbinger of Doom
Date: Tue, 08 Jul 2003 19:21
17 lines
1615 bytes
Hello,

Ik werk voor het ogenblik aan een C++ project dat
data over een netwerk moet verzenden en ontvangen.
Daarvoor gebruik ik het SOCKET datatype.
Alles werkt perfect, op ��n ding na:
Als ik probeer te verbinden met een server die niet
aan het luisteren is, dan blijft de connect() functie hangen.

Ik ben aan het zoeken naar iets dat me toelaat om
een time-out in te stellen voor de verbinding, maar ik niet echt iets.
Is er een manier om een connectie time-out in te stellen? en zo ja, hoe?
MS Visual C++ 6.0 is mijn compiler.
dank bij voorbaat

--
Harbinger of Doom
Re: Socket probleem in c++
#4717
Author: KLinZ
Date: Tue, 08 Jul 2003 20:51
19 lines
1787 bytes
Harbinger of Doom wrote:

> Ik werk voor het ogenblik aan een C++ project dat
> data over een netwerk moet verzenden en ontvangen.
> Daarvoor gebruik ik het SOCKET datatype.
> Alles werkt perfect, op ��n ding na:
> Als ik probeer te verbinden met een server die niet
> aan het luisteren is, dan blijft de connect() functie hangen.
>
> Ik ben aan het zoeken naar iets dat me toelaat om
> een time-out in te stellen voor de verbinding, maar ik niet echt iets.
> Is er een manier om een connectie time-out in te stellen? en zo ja,
> hoe? MS Visual C++ 6.0 is mijn compiler.
> dank bij voorbaat

setsockopt()

-- 
www.zenobits.com
Re: Socket probleem in c++
#4723
Author: Harbinger of Doom
Date: Tue, 08 Jul 2003 22:58
32 lines
2409 bytes
"KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht
news:u8GOa.15813$KF1.302281@amstwist00...
> Harbinger of Doom wrote:
>
> > Ik werk voor het ogenblik aan een C++ project dat
> > data over een netwerk moet verzenden en ontvangen.
> > Daarvoor gebruik ik het SOCKET datatype.
> > Alles werkt perfect, op ��n ding na:
> > Als ik probeer te verbinden met een server die niet
> > aan het luisteren is, dan blijft de connect() functie hangen.
> >
> > Ik ben aan het zoeken naar iets dat me toelaat om
> > een time-out in te stellen voor de verbinding, maar ik niet echt iets.
> > Is er een manier om een connectie time-out in te stellen? en zo ja,
> > hoe? MS Visual C++ 6.0 is mijn compiler.
> > dank bij voorbaat
>
> setsockopt()
>
Bij setsockopt() vind ik echt wel niets waarmee ik een connectie time-out
kan
instellen hoor.
Ik vind enkel SO_RCVTIMEO en SO_SNDTIMEO,
waarmee ik een receive en send time-out kan instellen, maar deze
hebben geen effect bij het tot stand brengen van de connectie.
Ben ik nu zo blind dat ik daar over kijk!? of zit het verscholen in
een van de andere opties zonder dat ik het doorheb?
Kan best zijn, ik ben behoorlijk nieuw in socket programmeren.
Kan iemand mij nog eens helpen?

HoD
Re: Socket probleem in c++
#4724
Author: Harbinger of Doom
Date: Tue, 08 Jul 2003 22:58
32 lines
2373 bytes
"KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht
news:u8GOa.15813$KF1.302281@amstwist00...
> Harbinger of Doom wrote:
>
> > Ik werk voor het ogenblik aan een C++ project dat
> > data over een netwerk moet verzenden en ontvangen.
> > Daarvoor gebruik ik het SOCKET datatype.
> > Alles werkt perfect, op ��n ding na:
> > Als ik probeer te verbinden met een server die niet
> > aan het luisteren is, dan blijft de connect() functie hangen.
> >
> > Ik ben aan het zoeken naar iets dat me toelaat om
> > een time-out in te stellen voor de verbinding, maar ik niet echt iets.
> > Is er een manier om een connectie time-out in te stellen? en zo ja,
> > hoe? MS Visual C++ 6.0 is mijn compiler.
> > dank bij voorbaat
>
> setsockopt()
>
Bij setsockopt() vind ik echt wel niets waarmee ik een connectie time-out
kan
instellen hoor.
Ik vind enkel SO_RCVTIMEO en SO_SNDTIMEO,
waarmee ik een receive en send time-out kan instellen, maar deze
hebben geen effect bij het tot stand brengen van de connectie.
Ben ik nu zo blind dat ik daar over kijk!? of zit het verscholen in
een van de andere opties zonder dat ik het doorheb?
Kan best zijn, ik ben behoorlijk nieuw in socket programmeren.
Kan iemand mij nog eens helpen?

HoD
Re: Socket probleem in c++
#4722
Author: Harbinger of Doom
Date: Tue, 08 Jul 2003 23:04
32 lines
2368 bytes
"KLinZ" <klinz@NOSPAMzenobitsSPAMNO.com> schreef in bericht
news:u8GOa.15813$KF1.302281@amstwist00...
> Harbinger of Doom wrote:
>
> > Ik werk voor het ogenblik aan een C++ project dat
> > data over een netwerk moet verzenden en ontvangen.
> > Daarvoor gebruik ik het SOCKET datatype.
> > Alles werkt perfect, op ��n ding na:
> > Als ik probeer te verbinden met een server die niet
> > aan het luisteren is, dan blijft de connect() functie hangen.
> >
> > Ik ben aan het zoeken naar iets dat me toelaat om
> > een time-out in te stellen voor de verbinding, maar ik niet echt iets.
> > Is er een manier om een connectie time-out in te stellen? en zo ja,
> > hoe? MS Visual C++ 6.0 is mijn compiler.
> > dank bij voorbaat
>
> setsockopt()
>
Bij setsockopt() vind ik echt wel niets waarmee ik een connectie time-out
kan
instellen hoor.
Ik vind enkel SO_RCVTIMEO en SO_SNDTIMEO,
waarmee ik een receive en send time-out kan instellen, maar deze
hebben geen effect bij het tot stand brengen van de connectie.
Ben ik nu zo blind dat ik daar over kijk!? of zit het verscholen in
een van de andere opties zonder dat ik het doorheb?
Kan best zijn, ik ben behoorlijk nieuw in socket programmeren.
Kan iemand mij nog eens helpen?

HoD
Re: Socket probleem in c++
#4725
Author: Harbinger of Doom
Date: Tue, 08 Jul 2003 23:18
4 lines
1321 bytes
sorry voor de driedubbele post,
had een probleempje met mn newsreader
waardoor leek dat het bericht verstuurd was.
HoD
Re: Socket probleem in c++
#4730
Author: Nicolas Barbier
Date: Wed, 09 Jul 2003 09:07
16 lines
1685 bytes
Harbinger of Doom wrote:

> Ik werk voor het ogenblik aan een C++ project dat
> data over een netwerk moet verzenden en ontvangen.
> Daarvoor gebruik ik het SOCKET datatype.
> Alles werkt perfect, op ��n ding na:
> Als ik probeer te verbinden met een server die niet
> aan het luisteren is, dan blijft de connect() functie hangen.

connect() zou moeten afbreken met een foutwaarde als het een TCP socket 
betreft en de andere kant is niet aan het wachten via accept(). Als het een 
UDP socket betreft probeert connect() zelfs geen "fysieke" verbinding te 
maken, dus blokkeren zou eveneens niet mogen gebeuren.

-- 
Nicolas Barbier
Re: Socket probleem in c++
#4733
Author: Harbinger of Doom
Date: Wed, 09 Jul 2003 10:45
36 lines
2526 bytes
"Nicolas Barbier" <anti@spam.invalid> schreef in bericht
news:3f0bdb8d$0$6526$afc38c87@sisyphus.news.be.easynet.net...
> Harbinger of Doom wrote:
>
> > Ik werk voor het ogenblik aan een C++ project dat
> > data over een netwerk moet verzenden en ontvangen.
> > Daarvoor gebruik ik het SOCKET datatype.
> > Alles werkt perfect, op ��n ding na:
> > Als ik probeer te verbinden met een server die niet
> > aan het luisteren is, dan blijft de connect() functie hangen.
>
> connect() zou moeten afbreken met een foutwaarde als het een TCP socket
> betreft en de andere kant is niet aan het wachten via accept(). Als het
een
> UDP socket betreft probeert connect() zelfs geen "fysieke" verbinding te
> maken, dus blokkeren zou eveneens niet mogen gebeuren.
>
> --
> Nicolas Barbier

Bedankt voor de hint Nicolas.
Het betreft een TCP socket, en deze breekt
inderdaad af met een foutmelding als de server na enige tijd niet geantwoord
heeft.
Het probleem is echter, dat ik daar heel lang op moet wachten (soms tot
30sec)
Ik weet heel zeker dat, als de server na een paar seconden niet geantwoord
heeft, dat
deze niet aan het luisteren is.
Ik vroeg me dus af of er een manier bestaat om de tijd voordat er een
time-out error
gegenereerd wordt te verkleinen.

--
Harbinger of Doom
Re: Socket probleem in c++
#4734
Author: Nicolas Barbier
Date: Wed, 09 Jul 2003 11:07
17 lines
1844 bytes
Harbinger of Doom wrote:

(snip de rest wegens fout gequote: lees http://www.houghi.org/quote/ )

> Het betreft een TCP socket, en deze breekt
> inderdaad af met een foutmelding als de server na enige tijd niet
> geantwoord heeft.
> Het probleem is echter, dat ik daar heel lang op moet wachten (soms tot
> 30sec)
> Ik weet heel zeker dat, als de server na een paar seconden niet geantwoord
> heeft, dat deze niet aan het luisteren is.

Is de server misschien gefirewalld en zendt hij daarom geen "connection 
refused"-pakketjes als er niemand op die poort aan het luisteren is?

-- 
Nicolas Barbier
Re: Socket probleem in c++
#4735
Author: Harbinger of Doom
Date: Wed, 09 Jul 2003 11:22
40 lines
2937 bytes
"Nicolas Barbier" <anti@spam.invalid> schreef in bericht
news:3f0bf791$0$6527$afc38c87@sisyphus.news.be.easynet.net...
> Harbinger of Doom wrote:
>
> (snip de rest wegens fout gequote: lees http://www.houghi.org/quote/ )
>
> > Het betreft een TCP socket, en deze breekt
> > inderdaad af met een foutmelding als de server na enige tijd niet
> > geantwoord heeft.
> > Het probleem is echter, dat ik daar heel lang op moet wachten (soms tot
> > 30sec)
> > Ik weet heel zeker dat, als de server na een paar seconden niet
geantwoord
> > heeft, dat deze niet aan het luisteren is.
>
> Is de server misschien gefirewalld en zendt hij daarom geen "connection
> refused"-pakketjes als er niemand op die poort aan het luisteren is?
>

Normaalgezien niet. Ook al is er een firewall, zou mijn poort moeten
opengelaten worden.
als ze gesloten is, mja, dan kan het wel zijn.
Bij sommige servers krijg ik een error 10061 (Connection forcefully
rejected)
en bij de andere een error 10060 (Connection timed out)
het is die laatste die zo lang duurt.
Ik veronderstel dat bij een error 10061 de poort gesloten is,
en dat bij een error 10060 de server gefirewalled is, ofdat het om een
vals IP-adres gaat (lees: een computer die afligt)
Er kunnen van die valse IP-adressen inzitten, want ik probeer te connecteren
naar
een lijst van 200 IP's die uit het register gelezen worden.
Deze IP's worden daar opgeslagen bij vorige sessies van het programma.
Het kan dus best zijn dat ��n of meerdere van die 200 ondertussen hun pc
afgelegd hebben,
en bijgevolg dus ook geen connection refused-antwoord kunnen geven.

--
Harbinger of Doom
Re: Socket probleem in c++
#4736
Author: Robrecht Jacques
Date: Wed, 09 Jul 2003 12:36
25 lines
2368 bytes
Harbinger of Doom wrote:
> "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
> news:3f0bf791$0$6527$afc38c87@sisyphus.news.be.easynet.net...
>> Harbinger of Doom wrote:
>>> Het betreft een TCP socket, en deze breekt
>>> inderdaad af met een foutmelding als de server na enige tijd niet
>>> geantwoord heeft.
>>> Het probleem is echter, dat ik daar heel lang op moet wachten (soms
>>> tot 30sec)
>>> Ik weet heel zeker dat, als de server na een paar seconden niet
>>> geantwoord heeft, dat deze niet aan het luisteren is.
...
> Er kunnen van die valse IP-adressen inzitten, want ik probeer te
> connecteren naar
> een lijst van 200 IP's die uit het register gelezen worden.
> Deze IP's worden daar opgeslagen bij vorige sessies van het programma.
> Het kan dus best zijn dat ��n of meerdere van die 200 ondertussen hun
> pc afgelegd hebben,
> en bijgevolg dus ook geen connection refused-antwoord kunnen geven.

Is die 30s niet de tijd dat een socket in TCP_WAIT toestand zit? Misschien
kan je je programma threaden zodat je verder kan met de IPs die hebben
geantwoord en in een aparte thread wachten op de andere.

Robrecht
Re: Socket probleem in c++
#4739
Author: Harbinger of Doom
Date: Wed, 09 Jul 2003 23:02
48 lines
3371 bytes
"Robrecht Jacques" <Robrecht.Jacques@advalvas.be> schreef in bericht
news:3f0c0d16$0$295$ba620e4c@reader0.news.skynet.be...
> Harbinger of Doom wrote:
> > "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
> > news:3f0bf791$0$6527$afc38c87@sisyphus.news.be.easynet.net...
> >> Harbinger of Doom wrote:
> >>> Het betreft een TCP socket, en deze breekt
> >>> inderdaad af met een foutmelding als de server na enige tijd niet
> >>> geantwoord heeft.
> >>> Het probleem is echter, dat ik daar heel lang op moet wachten (soms
> >>> tot 30sec)
> >>> Ik weet heel zeker dat, als de server na een paar seconden niet
> >>> geantwoord heeft, dat deze niet aan het luisteren is.
> ...
> > Er kunnen van die valse IP-adressen inzitten, want ik probeer te
> > connecteren naar
> > een lijst van 200 IP's die uit het register gelezen worden.
> > Deze IP's worden daar opgeslagen bij vorige sessies van het programma.
> > Het kan dus best zijn dat ��n of meerdere van die 200 ondertussen hun
> > pc afgelegd hebben,
> > en bijgevolg dus ook geen connection refused-antwoord kunnen geven.
>
> Is die 30s niet de tijd dat een socket in TCP_WAIT toestand zit? Misschien
> kan je je programma threaden zodat je verder kan met de IPs die hebben
> geantwoord en in een aparte thread wachten op de andere.
>
> Robrecht
>

Ik heb in andere groepen dezelfde raad gekregen.
Ik zou dus kunnen:
ofwel:
voor iedere IP een apparte thread maken, zodat deze
tegelijk kunnen afgehandeld worden.
ofwel:
twee threads maken. Ik heb me nl. laten vertellen dat,
als ik in de ene thread connect() aanroep, en dan na
bvb 5sec. vanuit de tweede thread een closesocket() aanroep,
connect() ogenblikkelijk zou moeten returnen met een bepaalde error.

Ik heb het nog niet kunnen proberen, maar ik denk dat die twee
inderdaad de �nige mogelijke oplossingen zijn. Nu moet ik
enkel nog uitzoeken welke van de twee best zal zijn.
Bedankt voor jullie hulp allemaal!!!

--
Harbinger Of Doom
Re: Socket probleem in c++
#4740
Author: Harbinger of Doom
Date: Thu, 10 Jul 2003 04:09
48 lines
3390 bytes
"Robrecht Jacques" <Robrecht.Jacques@advalvas.be> schreef in bericht
news:3f0c0d16$0$295$ba620e4c@reader0.news.skynet.be...
> Harbinger of Doom wrote:
> > "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
> > news:3f0bf791$0$6527$afc38c87@sisyphus.news.be.easynet.net...
> >> Harbinger of Doom wrote:
> >>> Het betreft een TCP socket, en deze breekt
> >>> inderdaad af met een foutmelding als de server na enige tijd niet
> >>> geantwoord heeft.
> >>> Het probleem is echter, dat ik daar heel lang op moet wachten (soms
> >>> tot 30sec)
> >>> Ik weet heel zeker dat, als de server na een paar seconden niet
> >>> geantwoord heeft, dat deze niet aan het luisteren is.
> ...
> > Er kunnen van die valse IP-adressen inzitten, want ik probeer te
> > connecteren naar
> > een lijst van 200 IP's die uit het register gelezen worden.
> > Deze IP's worden daar opgeslagen bij vorige sessies van het programma.
> > Het kan dus best zijn dat ��n of meerdere van die 200 ondertussen hun
> > pc afgelegd hebben,
> > en bijgevolg dus ook geen connection refused-antwoord kunnen geven.
>
> Is die 30s niet de tijd dat een socket in TCP_WAIT toestand zit? Misschien
> kan je je programma threaden zodat je verder kan met de IPs die hebben
> geantwoord en in een aparte thread wachten op de andere.
>
> Robrecht
>

Ik heb in andere groepen dezelfde raad gekregen.
Ik zou dus kunnen:
ofwel:
voor iedere IP een apparte thread maken, zodat deze
tegelijk kunnen afgehandeld worden.
ofwel:
twee threads maken. Ik heb me nl. laten vertellen dat,
als ik in de ene thread connect() aanroep, en dan na
bvb 5sec. vanuit de tweede thread een closesocket() aanroep,
connect() ogenblikkelijk zou moeten returnen met een bepaalde error.

Ik heb het nog niet kunnen proberen, maar ik denk dat die twee
inderdaad de �nige mogelijke oplossingen zijn. Nu moet ik
enkel nog uitzoeken welke van de twee best zal zijn.
Bedankt voor jullie hulp allemaal!!!

--
Harbinger Of Doom
Re: Socket probleem in c++
#4742
Author: Roel Schroeven
Date: Thu, 10 Jul 2003 07:02
53 lines
3787 bytes
Harbinger of Doom wrote:
> 
> "Robrecht Jacques" <Robrecht.Jacques@advalvas.be> schreef in bericht
> news:3f0c0d16$0$295$ba620e4c@reader0.news.skynet.be...
>> Harbinger of Doom wrote:
>> > "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
>> > news:3f0bf791$0$6527$afc38c87@sisyphus.news.be.easynet.net...
>> >> Harbinger of Doom wrote:
>> >>> Het betreft een TCP socket, en deze breekt
>> >>> inderdaad af met een foutmelding als de server na enige tijd niet
>> >>> geantwoord heeft.
>> >>> Het probleem is echter, dat ik daar heel lang op moet wachten (soms
>> >>> tot 30sec)
>> >>> Ik weet heel zeker dat, als de server na een paar seconden niet
>> >>> geantwoord heeft, dat deze niet aan het luisteren is.
>> ...
>> > Er kunnen van die valse IP-adressen inzitten, want ik probeer te
>> > connecteren naar
>> > een lijst van 200 IP's die uit het register gelezen worden.
>> > Deze IP's worden daar opgeslagen bij vorige sessies van het programma.
>> > Het kan dus best zijn dat ��n of meerdere van die 200 ondertussen hun
>> > pc afgelegd hebben,
>> > en bijgevolg dus ook geen connection refused-antwoord kunnen geven.
>>
>> Is die 30s niet de tijd dat een socket in TCP_WAIT toestand zit? Misschien
>> kan je je programma threaden zodat je verder kan met de IPs die hebben
>> geantwoord en in een aparte thread wachten op de andere.
>>
>> Robrecht
>>
> 
> Ik heb in andere groepen dezelfde raad gekregen.
> Ik zou dus kunnen:
> ofwel:
> voor iedere IP een apparte thread maken, zodat deze
> tegelijk kunnen afgehandeld worden.
> ofwel:
> twee threads maken. Ik heb me nl. laten vertellen dat,
> als ik in de ene thread connect() aanroep, en dan na
> bvb 5sec. vanuit de tweede thread een closesocket() aanroep,
> connect() ogenblikkelijk zou moeten returnen met een bepaalde error.

Je kan ook non-blocking IO gebruiken op sockets. Uit 'man 7 socket': 
"It is possible to do non-blocking IO on sockets by setting the
O_NONBLOCK flag on a socket file descriptor using fcntl(2).  Then all
operations that would  block will  (usually)  return  with EAGAIN
(operation should be retried later); connect(2) will return EINPROGRESS
error.  The user can then wait for various events via poll(2) or
select(2)." (en dan volgt er een lijstje van I/O events).

-- 
"Codito ergo sum"
Roel Schroeven
Re: Socket probleem in c++
#4745
Author: Harbinger of Doom
Date: Thu, 10 Jul 2003 12:33
26 lines
2475 bytes
>
> Je kan ook non-blocking IO gebruiken op sockets. Uit 'man 7 socket':
> "It is possible to do non-blocking IO on sockets by setting the
> O_NONBLOCK flag on a socket file descriptor using fcntl(2).  Then all
> operations that would  block will  (usually)  return  with EAGAIN
> (operation should be retried later); connect(2) will return EINPROGRESS
> error.  The user can then wait for various events via poll(2) or
> select(2)." (en dan volgt er een lijstje van I/O events).
>

Dit leek mij ook een heel goede oplossing, maar ze blijkt niet
zo goed te werken.
gelijk waar ik probeer te connecteren krijg ik een error 10035:
"operation would block"
zelfs als ik mijn eigen pc probeer te connecteren.
ik zet bvb een klein ftp-servertje op:
ik run mijn programma op 127.0.0.1 poort 21
resultaat: --> operation would block
daarna probeer ik: telnet localhost 21
resultaat --> geen probleem, ik krijg direct de login.
blijkbaar is dit toch niet de perfecte methode!
toch bedankt!!

--
Harbinger of Doom
Re: Socket probleem in c++
#4746
Author: Roel Schroeven
Date: Thu, 10 Jul 2003 12:50
32 lines
2874 bytes
Harbinger of Doom wrote:
> 
>>
>> Je kan ook non-blocking IO gebruiken op sockets. Uit 'man 7 socket':
>> "It is possible to do non-blocking IO on sockets by setting the
>> O_NONBLOCK flag on a socket file descriptor using fcntl(2).  Then all
>> operations that would  block will  (usually)  return  with EAGAIN
>> (operation should be retried later); connect(2) will return EINPROGRESS
>> error.  The user can then wait for various events via poll(2) or
>> select(2)." (en dan volgt er een lijstje van I/O events).
>>
> 
> Dit leek mij ook een heel goede oplossing, maar ze blijkt niet
> zo goed te werken.
> gelijk waar ik probeer te connecteren krijg ik een error 10035:
> "operation would block"
> zelfs als ik mijn eigen pc probeer te connecteren.
> ik zet bvb een klein ftp-servertje op:
> ik run mijn programma op 127.0.0.1 poort 21
> resultaat: --> operation would block
> daarna probeer ik: telnet localhost 21
> resultaat --> geen probleem, ik krijg direct de login.
> blijkbaar is dit toch niet de perfecte methode!
> toch bedankt!!

Ik kan je daar helaas niet echt mee helpen; ik weet dat het moet kunnen,
maar ik heb het zelf ook nog nooit gedaan. Nu ja, als je het op een
andere manier in orde krijgt, is het ook niet meer zo belangrijk.

-- 
"Codito ergo sum"
Roel Schroeven
Re: Socket probleem in c++
#4747
Author: Harbinger of Doom
Date: Thu, 10 Jul 2003 12:50
44 lines
3448 bytes
"Roel Schroeven" <j4nff5m02@sneakemail.com> schreef in bericht
news:QidPa.14152$7h.14130@afrodite.telenet-ops.be...
> Harbinger of Doom wrote:
> >
> >>
> >> Je kan ook non-blocking IO gebruiken op sockets. Uit 'man 7 socket':
> >> "It is possible to do non-blocking IO on sockets by setting the
> >> O_NONBLOCK flag on a socket file descriptor using fcntl(2).  Then all
> >> operations that would  block will  (usually)  return  with EAGAIN
> >> (operation should be retried later); connect(2) will return EINPROGRESS
> >> error.  The user can then wait for various events via poll(2) or
> >> select(2)." (en dan volgt er een lijstje van I/O events).
> >>
> >
> > Dit leek mij ook een heel goede oplossing, maar ze blijkt niet
> > zo goed te werken.
> > gelijk waar ik probeer te connecteren krijg ik een error 10035:
> > "operation would block"
> > zelfs als ik mijn eigen pc probeer te connecteren.
> > ik zet bvb een klein ftp-servertje op:
> > ik run mijn programma op 127.0.0.1 poort 21
> > resultaat: --> operation would block
> > daarna probeer ik: telnet localhost 21
> > resultaat --> geen probleem, ik krijg direct de login.
> > blijkbaar is dit toch niet de perfecte methode!
> > toch bedankt!!
>
> Ik kan je daar helaas niet echt mee helpen; ik weet dat het moet kunnen,
> maar ik heb het zelf ook nog nooit gedaan. Nu ja, als je het op een
> andere manier in orde krijgt, is het ook niet meer zo belangrijk.
>

Tis opgelost!!
kben weer veel te haastig geweest en de manual maar half gelezen
(shame on me)
blijkbaar kreeg ik die errors omdat alles veel te snel verliep.
via select() heb ik nu een tijd kunnen instellen voordat die
"operation would block" error gegenereerd wordt.
Nu werkt alles naar believen!
Een grote DANKT U aan u allen voor de hulp!!!

--
Harbinger Of Doom
Re: Socket probleem in c++
#4753
Author: Oelewapperke
Date: Thu, 10 Jul 2003 17:41
45 lines
3229 bytes
Harbinger of Doom wrote:

> Hello,
> 
> Ik werk voor het ogenblik aan een C++ project dat
> data over een netwerk moet verzenden en ontvangen.
> Daarvoor gebruik ik het SOCKET datatype.
> Alles werkt perfect, op ��n ding na:
> Als ik probeer te verbinden met een server die niet
> aan het luisteren is, dan blijft de connect() functie hangen.
> 
> Ik ben aan het zoeken naar iets dat me toelaat om
> een time-out in te stellen voor de verbinding, maar ik niet echt iets.
> Is er een manier om een connectie time-out in te stellen? en zo ja, hoe?
> MS Visual C++ 6.0 is mijn compiler.
> dank bij voorbaat

Asynchrone sockets en select() (of poll() ) dienen hiervoor. Je kan dat 
altijd zelf doen (een socket lib schrijven heb ik al een keer of 4 gedaan, 
dat is niet moeilijk, eentje met asynchrone support is serieus moeilijker 
maar de tweede of derde keer zou je ze toch al functioneel moeten kunnen 
krijgen).

Als je een "goeie" GUI app wilt (dus een die nooit blokkeert) ga je je heel 
programma rond die socket lib moeten draaien (gelijk bv QT dat doet, of 
eefje (op savannah), en gelijk het de bedoeling is dat je in windows 
programmeert). Dan moet je in je programma alles asynchroon doen (je kan 
daarin heel ver gaan, zoals bv de icoontjes van menu-entries pas inlezen 
als ze nodig zijn, of grote delen van je applicatie niet inladen als het 
programma start).

Basically maak je 1 centrale routine die events verzamelt en dispateched 
(via boost, libsigc++, of een eigen versie (heb ik in een oude versie van 
eefje geprobeerd, maar dit is extreem tricky), en je heel programma bestaat 
uit (liefst kleine) stukjes code die dan aangeroepen worden door die 
centrale routine, heel ff iets doen, en terug retourneren naar die centrale 
routine.

ACE (adaptive communications environment) is de uitgebreidste (en meest 
functionele lib die ik al gevonden heb die dit kan doen. De handleiding 
ervan is echter zo'n 2000 pagina's. En ACE dwingt u van op een bepaalde 
(goede) manier te programmeren, dat kan een serieus probleem zijn ;-p. ACE 
is gratis btw.

Oelewapperke
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads