refactor:改进了 TCPSoket 的 send 函数,尽量多地传输数据
This commit is contained in:
+1
-1
@@ -10,5 +10,5 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -g -O2")
|
|||||||
|
|
||||||
add_subdirectory(${PROJECT_SOURCE_DIR}/include/ouc_server)
|
add_subdirectory(${PROJECT_SOURCE_DIR}/include/ouc_server)
|
||||||
|
|
||||||
add_executable(test "${PROJECT_SOURCE_DIR}/examples/test_tcp_socket.cpp")
|
add_executable(test "${PROJECT_SOURCE_DIR}/examples/test_tcp_server.cpp")
|
||||||
target_link_libraries(test PRIVATE ouc_server_lib)
|
target_link_libraries(test PRIVATE ouc_server_lib)
|
||||||
@@ -66,10 +66,32 @@ namespace ouc_server
|
|||||||
|
|
||||||
bool TCPSocket::close() { return ::close(listen_fd) == 0; }
|
bool TCPSocket::close() { return ::close(listen_fd) == 0; }
|
||||||
|
|
||||||
ssize_t TCPSocket::send(const char *buf, size_t len) { return ::send(listen_fd, buf, len, 0); }
|
ssize_t TCPSocket::send(const char *buf, size_t len)
|
||||||
|
{
|
||||||
|
size_t sent = 0;
|
||||||
|
while (sent < len)
|
||||||
|
{
|
||||||
|
ssize_t n = ::send(listen_fd, buf + sent, len - sent, 0);
|
||||||
|
if (n < 0)
|
||||||
|
{
|
||||||
|
if (errno == EINTR)
|
||||||
|
continue;
|
||||||
|
if (errno == EAGAIN || errno == EWOULDBLOCK)
|
||||||
|
break;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (n == 0)
|
||||||
|
break;
|
||||||
|
sent += n;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sent;
|
||||||
|
}
|
||||||
|
|
||||||
ssize_t TCPSocket::send(const char *buf) { return this->send(buf, sizeof(buf)); }
|
ssize_t TCPSocket::send(const char *buf) { return this->send(buf, sizeof(buf)); }
|
||||||
|
|
||||||
|
ssize_t TCPSocket::send(const std::string &str) { return this->send(str.c_str()); }
|
||||||
|
|
||||||
ssize_t TCPSocket::recv(void *buf, size_t len) { return ::recv(listen_fd, buf, len, 0); }
|
ssize_t TCPSocket::recv(void *buf, size_t len) { return ::recv(listen_fd, buf, len, 0); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,6 +35,8 @@ namespace ouc_server
|
|||||||
public:
|
public:
|
||||||
ssize_t send(const char *, size_t);
|
ssize_t send(const char *, size_t);
|
||||||
ssize_t send(const char *);
|
ssize_t send(const char *);
|
||||||
|
ssize_t send(const std::string &);
|
||||||
|
|
||||||
ssize_t recv(void *, size_t);
|
ssize_t recv(void *, size_t);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user