??????????Э??????????????????loadrunner?μ??á????????????????????????????????
????????????????????
extern "C" LRDLLTEST_API int receive_version_data(int sockfd)
{
char* receiveBuf = (char *)malloc(1024);
memset(receiveBuf??0??1024);
int n = recv(sockfd??(char *)receiveBuf??1024??0);
free(receiveBuf);
return n;
}
???????????????????????????????????
????int n = recv(sockfd??(char *)receiveBuf??1024??0);
?????????????
????????????£?
????int n = recv(sockfd??(char *)receiveBuf??1024??MSG_PEEK);
????????????????:
???????????????????tcp???????????????????fd?????????????????á?
???????????????????????????read??write???????
????ssize_t write(int fd?? const void*buf??size_t nbytes);
????write??????buf?е?nbytes???????д???????????fd.????????д???????.????????-1. ??????errno????. ??????????У???????????????????????д?????????.
????1)write??????????0?????д???????????????????. ?????????????while??????????д??????????????е?buf??????nbyte?????????????????????????????д??????????????????д????????????
????2)??????С??0??????????????.??????????????????????.
????????????EINTR?????д???????????ж????.
????????EPIPE????????????????????(???????????????).
?????????????????????????????д???д?????????????????.
int my_write(int fd??void *buffer??int length)
{
int bytes_left;
int written_bytes;
char *ptr;
ptr=buffer;
bytes_left=length;
while(bytes_left>0)
{
/* ???д*/
written_bytes=write(fd??ptr??bytes_left);
if(written_bytes<=0) /* ??????*/
{
if(errno==EINTR) /* ?ж???? ???????д*/
written_bytes=0;
else /* ???????? ??а?????ó?????*/
return(-1);
}
bytes_left-=written_bytes;
ptr+=written_bytes; /* ????μ???????д */
}
return(0);
}