// Data Transimission
int Send(const char* data, int len) const;
- bool SendAll(const char* data, int len) const;
int Receive(char* data, int len) const;
bool IsValid() const { return socket_ != -1; }
}
-bool FreeBSDSocket::SendAll(const char* data, int len) const {
- int sent_len = 0;
- while (sent_len < len) {
- int status = Send(data, len);
- if (status <= 0) {
- return false;
- }
- sent_len += status;
- }
- return true;
-}
-
-
int FreeBSDSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
// Data Transimission
int Send(const char* data, int len) const;
- bool SendAll(const char* data, int len) const;
int Receive(char* data, int len) const;
bool IsValid() const { return socket_ != -1; }
}
-bool LinuxSocket::SendAll(const char* data, int len) const {
- int sent_len = 0;
- while (sent_len < len) {
- int status = Send(data, len);
- if (status <= 0) {
- return false;
- }
- sent_len += status;
- }
- return true;
-}
-
-
int LinuxSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
// Data Transimission
int Send(const char* data, int len) const;
- bool SendAll(const char* data, int len) const;
int Receive(char* data, int len) const;
bool IsValid() const { return socket_ != -1; }
}
-bool MacOSSocket::SendAll(const char* data, int len) const {
- int sent_len = 0;
- while (sent_len < len) {
- int status = Send(data, len);
- if (status <= 0) {
- return false;
- }
- sent_len += status;
- }
- return true;
-}
-
-
int MacOSSocket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
// Data Transimission
int Send(const char* data, int len) const;
- bool SendAll(const char* data, int len) const;
int Receive(char* data, int len) const;
bool IsValid() const { return socket_ != INVALID_SOCKET; }
}
-bool Win32Socket::SendAll(const char* data, int len) const {
- int sent_len = 0;
- while (sent_len < len) {
- int status = Send(data, len);
- if (status <= 0) {
- return false;
- }
- sent_len += status;
- }
- return true;
-}
-
-
int Win32Socket::Receive(char* data, int len) const {
int status = recv(socket_, data, len, 0);
return status;
// Data Transimission
virtual int Send(const char* data, int len) const = 0;
- virtual bool SendAll(const char* data, int len) const = 0;
virtual int Receive(char* data, int len) const = 0;
virtual bool IsValid() const = 0;
}
+static bool SendAll(Socket* socket, const char* data, int len) {
+ int sent_len = 0;
+ while (sent_len < len) {
+ int status = socket->Send(data, len);
+ if (status <= 0) {
+ return false;
+ }
+ sent_len += status;
+ }
+ return true;
+}
+
+
static void SendAndReceive(char *data, int len) {
bool ok;
CHECK(ok);
// Send all the data.
- ok = client->SendAll(data, len);
+ ok = SendAll(client, data, len);
CHECK(ok);
// Wait until data is received.