recently , I meet a question about the function recv of socket programming, let me introduce the background of the question ,
now I have a client and server in different pc , the client is linux OS without any 3th network libray, such ACE , curl ... and the server is Window OS - and I have deployed the http server - Apache , in my project , I will send http post request from socket programming to server which is a php website timely (about 1 time 2 seconds), and the post data is encapluted with Json format , that is the http Content-Type:application/json, but when I send the request , then I recv the response with Json format from server (in fact the response data is not big < 5*1024), but in the next , very slowly , about more than 10 seconds ,then I can get the response wholly , sometimes can not the any response Json , I suppose the reason is bacause the unfit buf length , I tried 1024 , 2048 , 512 ... , and the result is disappointed , the below is my recv code , could you help to see it ? thanks in advance , BTW , I use SOCK_STREAM in the socket
void Communication::receive(char buffer[], int BUFFER_SIZE){
static const int small_buf = 512;
char buf[small_buf];
bzero(buf,small_buf);
int length = 0;
char* pp = buffer;
do{
length = recv(socket_,buf,small_buf,0);
if(length < 0)
{
connect_state_ = false;
break;
}else if(length == small_buf){
connect_state_ = true;
memcpy(pp, buf, small_buf);
pp = pp+small_buf;
}else if(length < small_buf && length > 0)
{
connect_state_ = true;
memcpy(pp, buf, length);
pp = pp + length;
}else if(length == 0)
{
break;
}
}while(length > 0);
}
What I have tried:
I changed the buf length , 512, 1024 ,2048 , even I change SOCK_DGRAW to send json and then recv , but the result is same , recv is very very slow , I use sync to communicate with a php website in apache server