Win32 UDP socket puskurin ylivuoto?

jmax

Moro,
Olen tuossa väkästellyt ohjelmaa, jolla käyrän plottaukseen tarvittavia pisteitä siirretään UDP:llä verkon yli. Kun lähetysnopeus nousee riittävän suureksi tapahtuu vastaanottopäässä jotain veikeää ja socketti menee "tukkoon" ts. recvfrom ei saa luettua socketista dataa, mutta ei myöskään palauta mitään virhettä ja jää blokkaamaan (ikuisesti). Jos lähetysnopeutta pienentää, tapahtuu socketissa jonkin sortin timeout (n. 80 sekunnin päästä) ja vastaanotto jatkuu normaalisti.

Osaisiko jojku sanoa, mitä tuossa tapahtuu, eli miksi socketti jumiutuu ja miten siihen voisi vastaanottopäässä reagoida? Jumin tapahtuessa dataa liikku ~4-5 megatavua sekunnissa 100Mbit/s lähiverkossa.

Kiitokset vastauksista!

5

751

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • keksa

      Kahden 100Mbs noden välillä pitäis saada joku 11- ~12 MB liikkumaan sekunnissa hyvissä olosuhteissa.

      Saisko sinne vastaanottopäähän jotain debuggeria tai vaikka printtais jotain tekstiä konsoliin? Näkis sen kohdan mihin se aina jumii.

      • jmax

        Joo, tuo teoreettinen nopeus on varmasti jotain tuollaista.

        Ohjelmahan ei sinänsä jää jumiin mitenkään, vaan recvfrom funktio alkaa jostain syystä blokkaamaan vastaanottopäässä (aivan kuten silloin, kun socketin vstaanottopuskurissa ei ole mitään luettavaa).

        Olen tarkastanut kaikki winsock-funktioiden kutsujen paluuarvot (ja ovat ok) sekä yrittänyt kasvattaa SO_RCVBUF kokoa ilman tulosta. Lisäksi tarkistan SO_ERROR:in arvon vastaanotto-loopin sisällä, jos vaikka socketti menisi rikki, mutta nollaa pukkaa sieltäkin.

        Eli paperilla sekä lähetys että vastaanottopäässä kaikki menee putkeen, mutta käytänössä sitten ei. :/


      • rautapuolen ongelmaa
        jmax kirjoitti:

        Joo, tuo teoreettinen nopeus on varmasti jotain tuollaista.

        Ohjelmahan ei sinänsä jää jumiin mitenkään, vaan recvfrom funktio alkaa jostain syystä blokkaamaan vastaanottopäässä (aivan kuten silloin, kun socketin vstaanottopuskurissa ei ole mitään luettavaa).

        Olen tarkastanut kaikki winsock-funktioiden kutsujen paluuarvot (ja ovat ok) sekä yrittänyt kasvattaa SO_RCVBUF kokoa ilman tulosta. Lisäksi tarkistan SO_ERROR:in arvon vastaanotto-loopin sisällä, jos vaikka socketti menisi rikki, mutta nollaa pukkaa sieltäkin.

        Eli paperilla sekä lähetys että vastaanottopäässä kaikki menee putkeen, mutta käytänössä sitten ei. :/

        tai palomuuria, verkkokortin ajuria yms. softia. Koita muuttaa keskeytystiheyttä ajurin asetuksista. Eihän kumpikaan kone ole muuten kannettava...? Koita debugata ubuntun livecd:llä ja netcatilla (nc) udp-tilassa.


    • if-else

      Jotain mietteitä...


      Oletko katsonut "netstat -s" komennolla mitä UDP ja IP tilastot näyttävät, tai "netstat -e" komennolla mitä ethernet tilastot näyttävät. Eli kasvaako vastaanotettujen datagramminen tai virheiden määrä, jne. Eli mille tasolle paketit tuossa jumiutuneessa tilanteessa jäävät?

      Ilmeisesti kun puskuri menee yli tai lähes täyteen, ei ajuri enää pysty vastaanottamaan yhtä kokonaista datagrammia, josta johtuen se alkaa hylätä pirstoutuneita datagrammeja virheellisinä, josta sitten seuraa se "jumiutuminen" koska ei ole mitään mitä vastaanottaa.

      Voiko olla mahdollista, että kysymyksessä on lähetys pään ongelma? Jos kysymyksessä lähetyspään ongelmasta, eikä ole XP tai ME, niin silloin voi olla kyseessä:

      http://support.microsoft.com/kb/233401

    • .....

      Voi olla että suuri määrä paketteja vaikka niiden koko on pieni aihetaa jonkin sortin ongelman alatasolla.

      Lähetätkö kerralla useamman pisteen tiedot vai ainoastaan yhden pisteen tiedot ? kokeile kasvataa pakettikokoa.

      Jos on mahdollista toteuta mini vastaanotto vaikka pythonilla, ja katso jumitaako se. Jolloin tiedät onko ongelma ajuritasolla (ajurit päivitetty ?) vai omassa koodissa.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Janne Ahonen E R O A A

      Taas 2 lasta jää vaille ehjää perhettä!
      Kotimaiset julkkisjuorut
      145
      2519
    2. En kai koskaan saa sinua

      Koska et usko että riitäisit minulle. Olet aina pitänyt itseäsi liian risana ja heikkona. Katkot korkeutesi, ja poraat k
      Ikävä
      154
      1649
    3. Terveystalon lääkärit ylilaskuttaneet

      Tämän pörriäiset osaavat, laskuttamisen. Terveystalo myöntää asian. https://www.hs.fi/suomi/art-2000011134269.html "K
      Maailman menoa
      133
      1613
    4. Saran ökytyyli käänsi katseita.

      On nyt kyllä Sara kasvoistaan, kuvan perusteella todellakin pyöristynyt ainakin kuvan perusteella.
      Kotimaiset julkkisjuorut
      146
      1344
    5. Nyt on aika laittaa parit selkoon.

      Onko pareja täällä. Laita kirjaimet kuka tykkää kenestäkin ?
      Ikävä
      66
      1338
    6. The Summit Suomi: Maxie avaa hyytävästä tilanteesta kuvauksissa: "Veri roiskui ja tajusi, että..."

      Oletko seurannut The Summit Suomea? Tykkäätkö vai et tai mitä mieltä ylipäätään olet sarjasta? Moni katsoja on kaikonnut
      Tv-sarjat
      13
      1170
    7. Työttömille lusmuille luvassa lisää keppiä

      Hallitus aikoo kiristää velvoitteiden laiminlyönnistä seuraavia työttömyysturvan karensseja ensi vuodesta alkaen. Hall
      Maailman menoa
      261
      1123
    8. Ootko huomannut miten

      pursuat joka puolelta. Sille joka luulee itsestään liikoja 🫵🙋🏻‍♂️
      Ikävä
      156
      966
    9. Miksi ihmeessä?

      Erika Vikman diskattiin, ei osallistu Euroviisuihin – tilalle Gettomasa ja paluun tekevä Cheek
      Ateismi
      22
      904
    10. Tiedän kaiken sinusta ja kaikesta

      Tiedän miten kärsit. Tiedän millanen oikeesti oot. Tiedän miksi valehtelit, tiedän miksi satutit mua. Tiedän mitä tapaht
      Ikävä
      58
      889
    Aihe