WinSock2를 사용하고 있으며 모든 패키지를 한꺼번에 받고 싶습니다 (XML 파일). setsockopt를가 수신 버퍼의 크기를 설정하는 내 "주문"을 무시하는 것 때문에 는 지금은 아래와 같이 만들고있어,하지만 항상 실행에서 확인을 반환setsockopt 기능이 작동하지 않는 것 같습니다.
#define IP_BUF_SZ 2000000
//...
std::string sBuffer;
long chrs_read = 0;
int iBufSize = IP_BUF_SZ;
//...
if (setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, (char*)&iBufSize, sizeof(int)) == SOCKET_ERROR)
MessageBox("Unable to increase"); //never reachs here
do
{
char* buf = (char*)MALLOCZ(IP_BUF_SZ + 1000);
chrs_read = recv(sockfd, buf, IP_BUF_SZ, 0);
if (chrs_read > 0)
sBuffer += std::string(buf);
FREE(buf);
buf = NULL;
}
while (chrs_read > 0);
하지만 내가 좋아하는 일을하고 싶습니다 그 (한 번에) :
setsockopt(IP_STATUS[CHAN_EPIC].sockfd, SOL_SOCKET, SO_RCVBUF, (char*)&iBufSize, sizeof(int);
char* buf = (char*)MALLOCZ(IP_BUF_SZ + 1000);
chrs_read = recv(IP_STATUS[CHAN_EPIC].sockfd, buf, IP_BUF_SZ, 0);
sBuffer += std::string(buf);
비고 : 내 파일이 IP_BUF_SZ이 크기보다 작다. 미리 감사드립니다.
'recv' 함수의 반환 값을 확인하여'while' 루프의 모든 데이터를 수신 할 수 있으며 반환 값이'0 '이 될 때까지 읽기를 기대할 수 있습니다. – fnc12