🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #4813

Re: beetje hulp gezocht

#4813
From: Roel Schroeven
Date: Mon, 14 Jul 2003 12:33
103 lines
4531 bytes
Bart Vandewoestyne wrote:
> Bart Vandewoestyne wrote:
>> 
>> Ben momenteel bezig met het porten van mmsclient 
>> (http://www.geocities.com/majormms/) naar windows.  Ik ben op een punt 
>> gekomen dat ik *iets* van stream downloadt, en dat dat weggeschreven 
>> wordt naar een file, maar als ik die file dan probeer te openen in 
>> Windows Media Player krijg ik de boodschap dat de file corrupt is.
> 
> Bon, misschien heb ik er een idee van waar de fout zou kunnen zitten... 
> volgens mij gaat het ergens fout in de get_data() methode.  In de Linux 
> client ziet die er zo uit:
> 
> static int get_data (int s, char *buf, size_t count) {
> 
>    ssize_t  len, total;
> 
>    total = 0;
> 
>    while (total < count) {
> 
>      len = read (s, &buf[total], count-total);
> 
>      if (len<0) {
>        perror ("read error:");
>        return 0;
>      }
> 
>      total += len;
> 
>      if (len != 0) {
>        printf ("[%d/%d]", total, count);
>        fflush (stdout);
>      }
> 
>    }
>    return 1;
> }
> 
> Ik heb ze als volgt vertaald naar windows:
> 
> static int get_data (int s, char *buf, unsigned int count) {
> 
>    unsigned int len, total;
> 
>    total = 0;
> 
>    while (total < count) {  /* while we don't have all data yet... */
> 
>      len = recv(s, &buf[total], count-total, 0);  /* receive the rest for
> 						    as much as we can
> 						    get */
> 
>      if (len<0) {
>        perror ("read error in get_data():");
>        return 0;
>      }
> 
>      /* increase the number indicating how much we've read */
>      total += len;
> 
>      if (len != 0) {
>        /* print out how much we've read already */
>        printf ("[%d/%d]", total, count);
>        fflush (stdout);
>      }
>    }
>    return 1;
> }
> 
> Ik vermoed dat het ergens zit in het feit dat ik die read vervangen heb 
> dor een recv... en dat die parameters niet hetzelfde mogen 
> ge�nterpreteerd worden... zo zou bij recv() de derde parameter de lengte 
> van de buffer moemten zijn... en bij read is dat 'het aantal bytes dat 
> je wil lezen'... ik zou hier vermoeden dat het in feite toch op 
> hetzelfde neerkomt... maar ik zie niet in waar het fout gaat...

Die fout die je krijgt, is dat WSAEMSGSIZE? Ik begin namelijk een
verschil te vermoeden tussen read en recv:

read leest in principe zo veel bytes als je vraagt. Als er minder
voorhanden zijn krijgt je er minder, als er meer staan te wachten krijg
je er zoveel als je gevraagd had, en de rest krijg je bij een volgende
call.

recv leest een message. Als die message kleiner is dan je buffer geen
probleem, als hij te groot is heb je wel een probleem. Eigenlijk moet je
er gewoon altijd voor zorgen dat je buffer groot genoeg is, als ik het
goed begrijp. MSDN zegt:
"If the datagram or message is larger than the buffer supplied, the
buffer is filled with the first part of the datagram, and recv generates
the error WSAEMSGSIZE. For unreliable protocols (for example, UDP) the
excess data is lost; for reliable protocols, the data is retained by the
service provider until it is successfully read by calling recv with a
large enough buffer."

De volledige data wordt, denk ik, achtergehouden tot je recv aanroept
met een buffer die groot genoeg is, in plaats van alleen datgene dat
niet meer in de buffer paste.

-- 
"Codito ergo sum"
Roel Schroeven
Technical Details
Message-ID: <sqxQa.7073$F92.1193@afrodite.telenet-ops.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-09!supernews.com!news.maxwell.syr.edu!wn14feed!worldnet.att.net!204.71.34.3!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
References: <3F10A588.7000205@pandora.be> <3F129BBF.60203@pandora.be>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII
X-Google-Thread: fcea4,fce18b96ed6a95ca
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-07-14 05:34:08 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-01!sn-xit-09!supernews.com!news.maxwell.syr.edu!wn14feed!worldnet.att.net!204.71.34.3!newsfeed.cwix.com!ossa.telenet-ops.be!afrodite.telenet-ops.be.POSTED!not-for-mail
Newsgroups: be.comp.programming
From: Roel Schroeven <j4nff5m02@sneakemail.com>
Subject: Re: beetje hulp gezocht
References: <3F10A588.7000205@pandora.be> <3F129BBF.60203@pandora.be>
Organization: http://www.catb.org/~esr/faqs/smart-questions.html
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
User-Agent: slrn/0.9.7.4 (Linux)
Lines: 103
Message-ID: <sqxQa.7073$F92.1193@afrodite.telenet-ops.be>
Date: Mon, 14 Jul 2003 12:33:28 GMT
NNTP-Posting-Host: 81.164.36.61
X-Complaints-To: abuse@telenet.be
X-Trace: afrodite.telenet-ops.be 1058186008 81.164.36.61 (Mon, 14 Jul 2003 14:33:28 MET DST)
NNTP-Posting-Date: Mon, 14 Jul 2003 14:33:28 MET DST