Click here to Skip to main content
15,893,668 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
AnswerRe: download a web page Pin
jschell6-Dec-23 6:52
jschell6-Dec-23 6:52 
mike7411 wrote:
get stuck in the recv function.


I suspect that none of the suggestions in the other post are going to help with this.

Your design is wrong. The message flow looks like this.
- Client- Open socket (server accepts)
- Client- Send request
- Server- Sends response
- Client- Read request
- Client- Closes socket

Notice in the above the server does nothing to terminate the message stream. The client is responsible, not the server.

So recv() sits there waiting for a message that the server will never send.

The HTTP protocol defines a request and then a response.

You however are not following that protocol. At a minimum you are missing the following
1 - You are not checking for a HTTP error code.
2 - You are not reading the 'content-length' header attribute.
3 - You are not looking for the response body.

If you were doing the second then you would use that to read to the end of the message using the content-length. That specifically defines how many bytes the server should send in the response body

Additionally there are additional error conditions that good code must expect
- The content-length might be missing. Invalid HTTP but one must still anticipate that.
- The content-length is too long. Very difficult to deal with. And it still results in the problem you are seeing. So you must add a timeout. Google for how to do that.

What about if the content-length is too short? Myself I just ignore that case. Because in most cases content-length will always be right. And too short might lead to other problems but you have no way to detect that unless you always do a timeout read, and that will slow the application to no point (again because it almost always will be right.)
AnswerRe: download a web page Pin
Gerry Schmitz6-Dec-23 7:28
mveGerry Schmitz6-Dec-23 7:28 
Questioncopying a file in C++17 Pin
mike74115-Dec-23 21:36
mike74115-Dec-23 21:36 
AnswerRe: copying a file in C++17 Pin
Richard MacCutchan5-Dec-23 22:07
mveRichard MacCutchan5-Dec-23 22:07 
AnswerRe: copying a file in C++17 Pin
jschell6-Dec-23 7:04
jschell6-Dec-23 7:04 
Questionprintf without stdio.h Pin
mike74115-Dec-23 5:21
mike74115-Dec-23 5:21 
AnswerRe: printf without stdio.h Pin
Mircea Neacsu5-Dec-23 5:31
Mircea Neacsu5-Dec-23 5:31 
GeneralRe: printf without stdio.h Pin
mike74115-Dec-23 16:23
mike74115-Dec-23 16:23 
GeneralRe: printf without stdio.h Pin
Mircea Neacsu5-Dec-23 16:42
Mircea Neacsu5-Dec-23 16:42 
AnswerRe: printf without stdio.h Pin
Victor Nijegorodov5-Dec-23 5:32
Victor Nijegorodov5-Dec-23 5:32 
AnswerRe: printf without stdio.h Pin
k50545-Dec-23 6:02
mvek50545-Dec-23 6:02 
GeneralRe: printf without stdio.h Pin
jschell6-Dec-23 7:07
jschell6-Dec-23 7:07 
Questioncopying a file Pin
mike74115-Dec-23 3:24
mike74115-Dec-23 3:24 
AnswerRe: copying a file Pin
Mircea Neacsu5-Dec-23 3:32
Mircea Neacsu5-Dec-23 3:32 
AnswerRe: copying a file Pin
Richard MacCutchan5-Dec-23 4:05
mveRichard MacCutchan5-Dec-23 4:05 
AnswerRe: copying a file Pin
k50545-Dec-23 4:42
mvek50545-Dec-23 4:42 
QuestionMyth of a Myth? Pin
jschell4-Dec-23 3:38
jschell4-Dec-23 3:38 
AnswerRe: Myth of a Myth? Pin
Richard MacCutchan4-Dec-23 4:57
mveRichard MacCutchan4-Dec-23 4:57 
AnswerRe: Myth of a Myth? Pin
Mircea Neacsu4-Dec-23 5:05
Mircea Neacsu4-Dec-23 5:05 
GeneralRe: Myth of a Myth? Pin
harold aptroot6-Dec-23 19:55
harold aptroot6-Dec-23 19:55 
Questionhow to add another primary menu - C + in Qt Pin
Salvatore Terress1-Dec-23 6:34
Salvatore Terress1-Dec-23 6:34 
AnswerRe: how to add another primary menu - C + in Qt Pin
Andre Oosthuizen1-Dec-23 22:18
mveAndre Oosthuizen1-Dec-23 22:18 
GeneralRe: how to add another primary menu - C + in Qt Pin
Richard MacCutchan1-Dec-23 22:22
mveRichard MacCutchan1-Dec-23 22:22 
QuestionInvalidate rectangle Pin
Calin Negru1-Dec-23 0:41
Calin Negru1-Dec-23 0:41 
AnswerRe: Invalidate rectangle Pin
CPallini1-Dec-23 1:01
mveCPallini1-Dec-23 1:01 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.