refactor:改进了 TCPSoket 的 send 函数,尽量多地传输数据

This commit is contained in:
2025-09-29 08:59:49 +00:00
parent cbf256b4a8
commit 74eca4a693
3 changed files with 26 additions and 2 deletions
+1 -1
View File
@@ -10,5 +10,5 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static -g -O2")
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)
+23 -1
View File
@@ -66,10 +66,32 @@ namespace ouc_server
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 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); }
}
}
+2
View File
@@ -35,6 +35,8 @@ namespace ouc_server
public:
ssize_t send(const char *, size_t);
ssize_t send(const char *);
ssize_t send(const std::string &);
ssize_t recv(void *, size_t);
};
}