I
Warum willst du Nullterminieren? Und warum gibst du nicht den String als Rückgabewert zurück? Statt Errorchecking per Returnvalue würde ich es in Erwägung ziehen einfach eine Exception zu werfen.
So wäre mein Ansatz:
void tcp_server::recv_from(SOCKET sock, std::string& s)
{
std::vector<char> buffer(500);
int readBytes = recv(sock, &buffer[0], buffer.size(), 0);
std::string readString(reinterpret_cast<const char*>(&buffer[0]), readBytes);
s = readString;
}
Ja, unschön den char* zu const zu casten, aber was solls. Denke nicht dass man dabei auf die Fresse fallen kann. Dafür hast du einen size-terminated string (Stell dir vor ein Client schickt dir ne '0' im Request. Würde deinen Server total verwirren) und vector ist doch besser zum Arbeiten als diese schrecklichen char-Arrays.