C++ Google Chrome háromszor csatlakozik, miért?

C++ Google Chrome háromszor csatlakozik, miért?
2017-11-27T23:05:23+01:00
2017-11-28T23:24:54+01:00
2022-12-04T22:35:44+01:00
Dezső Bodor
Visual Stúdióban  írok egy webkiszolgálót.
A Google Chrome háromszor csatlakozik. Kettő világos, 2 db get egyikkel ico-tkér, másikban az oldalt. De a harmadik tök kuka! Ezen a kapcsolaton mit akar? 

Időnként pedig VS. debugban zaklat miatta:
Unhandled exception at 0x0000000077BB89F2 (ntdll.dll) in DOZER.exe: 0xC000000D:
Érvénytelen paraméter átadása történt egy szolgáltatáshoz vagy funkcióhoz. 

Ha folytatást választom mintha semmi nem történne, minden fut tovább probléma nélkül.
De rohadtul zavar mit akar.
Mutasd a teljes hozzászólást!
A Google Chrome háromszor csatlakozik. Kettő világos, 2 db get egyikkel ico-tkér, másikban az oldalt. De a harmadik tök kuka! Ezen a kapcsolaton mit akar?

Valószínűleg csak arról van szó, hogy agresszívan próbálja párhuzamosítani az oldal letöltését, és már azelőtt kinyit három kapcsolatot, hogy tudná, mi lesz az oldalon. Egy átlagos weboldalon van tucatnyi kép, Javascript meg CSS, ezért általában megéri felkészülni rá, hogy párhuzamosan húzza le őket. (Kivéve ha HTTP2-es a kapcsolat, mert ott már megoldott egy TCP kapcsolat fenntartásával több fájlt párhuzamosan lehúzni.)

Időnként pedig VS. debugban zaklat miatta:
Unhandled exception at 0x0000000077BB89F2 (ntdll.dll) in DOZER.exe: 0xC000000D:
Érvénytelen paraméter átadása történt egy szolgáltatáshoz vagy funkcióhoz.

Mennyire vagy biztos benne, hogy a két dolog összefügg? Akármit is csinál a Chrome, egy tisztességes webszervernek nem kéne fejre állnia tőle, hogy valaki nyit egy kapcsolatot, aztán be is zárja minden adatküldés nélkül.

Simán lehet, hogy valami mástól száll el. Debug módban forgatott programban kéne előidézni a hibát, amikor debugger alatt fut, és akkor pontosabban tudnád, hogy mi száll el és miért.
Mutasd a teljes hozzászólást!

  • Debug módban forgatott programban kéne előidézni a hibát

    Csak debugban jön elő egy VisualStudio requester, ha továbbengedem  (continue), fut tovább.
    Maga a requester nem is az általam indított szálakban, hanem winsock által indított szálra hivatkozik.
    Ha önállóan futtatom, semmi jele hibának (lehet nem is hiba?), csak informálni próbál a VS, hogy van egy ilyen jelenség?
    Mutasd a teljes hozzászólást!
  • Őszintén: nem tudom. Hátha jár erre valaki, akinek nagyobb tapasztalata van natív Windows fejlesztésben.
    Mutasd a teljes hozzászólást!
  • Én így elsőre arra gondolnék, hogy egy kezeletlen kivétel megöli az egyik száladat.
    Mivel a főszálad nem áll le, a program fut tovább, debugger nélkül ezt nem is látod, viszont ha debuggerrel futtatod, akkor az jelzi neked.
    Lehet, hogy nem okoz hibát, de nem éppen normális, ha egy szál kivétellel hal meg.
    A kivétel lehet, hogy nem a te kódodban dobódik, de a debuggerben keress egy cal stack ablakot, ott meg tudod nézni, hogy honnan hívtad meg a problémás kódrészletet.
    Mutasd a teljes hozzászólást!
  • Valószínűleg valamit elrontasz. Kód nélkül nehéz megmondani.

    Ahogy az előttem hozzászóló írta, a debug módba ezért ennél jóval több információ áll rendelkezésedre az elszállásról, mint amit írtál. Ne a 'continue'-ra kattints és vizsgáld meg a debugger-be, hogy hol/mi okozza a problémát.
    Mutasd a teljes hozzászólást!
  • Köszi srácok a gondolatokat!

    A megoldás sokkal egyszerübb volt mint gondoltam, hogy rövid timeout időt adtam a select()-nek. Ha jól sejtem az exception maga volt a time out, azaz mikor 1sec alatt nem futott le a select akkor azt úgy oldoták meg, hogy megszakítással szakítotja meg a WinSock? Most kapott 5sec-et és nyoma sincsen a rqesternek.
    Azt írtam, hogy igazából nem borult meg semmi és szál sem tűnt el, csak zaklat egy ablakkal.

    Üdv!
    Mutasd a teljes hozzászólást!
  •  Ha jól sejtem az exception maga volt a time out, azaz mikor 1sec alatt nem futott le a select akkor azt úgy oldoták meg, hogy megszakítással szakítotja meg a WinSock?

    Figyu, a hibaüzenetet te magad másoltad be, magyarul volt:

    Érvénytelen paraméter átadása történt egy szolgáltatáshoz vagy funkcióhoz.

    Ebből az üzenetből hogy jött ki, hogy megszakítja magát a WinSock, és ezt elkapja a debuggered? Az üzenet arról szól, hogy valamelyik WinAPI hívás érvénytelen paramétert kapott. Ha megvizsgálod a stack trace-t, amit a debugger ad, akkor van esély kideríteni, hogy pontosan milyen hívás szállt el és melyik paraméterben van a hiba. E nélkül az információ nélkül viszont mi csak találgatni fogunk tudni, felesleges konkrétumokat kérdezni.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd