@@ -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