вот что-то в этом роде получилось, поругайте: typedef struct { char signature[8]; int command; size_t msgsize; } ctrl_header; int operate(int sock, sq_command command, void * response, size_t len_buff) { char *recvbuf; int n; ctrl_header hdr; memcpy(hdr.signature,"SQ1.0.00\n",10); hdr.command=1; hdr.msgsize=0; n = send(sock, &hdr, sizeof(hdr),0); n = recv(sock, &hdr, sizeof(hdr),MSG_WAITALL); if ((n==sizeof(hdr)) && (strncmp(hdr.signature,"SQ1.0.00\n",10)==0)){ if (hdr.msgsize>0){ if ((recvbuf=malloc(hdr.msgsize))!=NULL){ if ((n = recv(sock,recvbuf, hdr.msgsize, MSG_WAITALL))==hdr.msgsize){ if ((response!=NULL) && (len_buff>=0)) { memcpy(response,recvbuf,len_buff); } } else { //maybe socket error, count of received data