@@ -114,11 +114,25 @@ void SetNonBlock(SOCKET fd, bool value) {
114114
115115void SetTimeout (SOCKET fd, const SocketTimeoutParams& timeout_params) {
116116#if defined(_unix_)
117- timeval recv_timeout { . tv_sec = timeout_params.recv_timeout .count (), . tv_usec = 0 };
118- setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout, sizeof (recv_timeout));
117+ timeval recv_timeout{ timeout_params. recv_timeout . count () / 1000 , static_cast < int >( timeout_params.recv_timeout .count () % 1000 * 1000 ) };
118+ auto recv_ret = setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, &recv_timeout, sizeof (recv_timeout));
119119
120- timeval send_timeout { .tv_sec = timeout_params.send_timeout .count (), .tv_usec = 0 };
121- setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof (send_timeout));
120+ timeval send_timeout{ timeout_params.send_timeout .count () / 1000 , static_cast <int >(timeout_params.send_timeout .count () % 1000 * 1000 ) };
121+ auto send_ret = setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, &send_timeout, sizeof (send_timeout));
122+
123+ if (recv_ret == -1 || send_ret == -1 ) {
124+ throw std::system_error (getSocketErrorCode (), getErrorCategory (), " fail to set socket timeout" );
125+ }
126+ #else
127+ DWORD recv_timeout = static_cast <DWORD>(timeout_params.recv_timeout .count ());
128+ auto recv_ret = setsockopt (fd, SOL_SOCKET, SO_RCVTIMEO, (const char *)&recv_timeout, sizeof (DWORD));
129+
130+ DWORD send_timeout = static_cast <DWORD>(timeout_params.send_timeout .count ());
131+ auto send_ret = setsockopt (fd, SOL_SOCKET, SO_SNDTIMEO, (const char *)&send_timeout, sizeof (DWORD));
132+
133+ if (recv_ret == SOCKET_ERROR || send_ret == SOCKET_ERROR) {
134+ throw std::system_error (getSocketErrorCode (), getErrorCategory (), " fail to set socket timeout" );
135+ }
122136#endif
123137};
124138
@@ -244,6 +258,10 @@ Socket::Socket(const NetworkAddress& addr, const SocketTimeoutParams& timeout_pa
244258 : handle_(SocketConnect(addr, timeout_params))
245259{}
246260
261+ Socket::Socket (const NetworkAddress & addr)
262+ : handle_(SocketConnect(addr, SocketTimeoutParams{}))
263+ {}
264+
247265Socket::Socket (Socket&& other) noexcept
248266 : handle_(other.handle_)
249267{
0 commit comments