char buf[2000]; DataHolder DataForServer; DataHolder DataForClient; while(true) { // Get the data from the client to the server while(true) { ret = recv(contoclient.socket, buf, sizeof(buf), 0); if(ret == SOCKET_ERROR) { ret = WSAGetLastError(); if(ret != WSAEWOULDBLOCK) throw ZStarsLib::CException("ConToClient error (recv)"); break; } else { DataForServer.bb.append(buf, ret); } } // Send the pending data to the server while(DataForServer.bb.length()) { ret = send(contoserver.socket, DataForServer.bb.contents(), DataForServer.bb.length(), 0); if(ret == SOCKET_ERROR) { ret = WSAGetLastError(); if(ret != WSAEWOULDBLOCK) throw ZStarsLib::CException("ConToServer error (send)"); Sleep(5); } else { ByteBuffer bb; char * data = DataForServer.bb.contents(); data += ret; if(DataForServer.bb.length() - ret) bb.append(data, DataForServer.bb.length() - ret); DataForServer.bb = bb; } } // Get the data from the server to the client while(true) { ret = recv(contoserver.socket, buf, sizeof(buf), 0); if(ret == SOCKET_ERROR) { ret = WSAGetLastError(); if(ret != WSAEWOULDBLOCK) throw ZStarsLib::CException("ConToServer error (recv)"); break; } else { DataForClient.bb.append(buf, ret); } } // Send the pending data to the client while(DataForClient.bb.length()) { ret = send(contoclient.socket, DataForClient.bb.contents(), DataForClient.bb.length(), 0); if(ret == SOCKET_ERROR) { ret = WSAGetLastError(); if(ret != WSAEWOULDBLOCK) throw ZStarsLib::CException("ConToClient error (send)"); Sleep(5); } else { ByteBuffer bb; char * data = DataForClient.bb.contents(); data += ret; if(DataForClient.bb.length() - ret) bb.append(data, DataForClient.bb.length() - ret); DataForClient.bb = bb; } } Sleep(5); }