@@ -27,6 +27,17 @@ namespace HttpServer
2727 #endif
2828 }
2929
30+ int Socket::getLastError ()
31+ {
32+ #ifdef WIN32
33+ return ::WSAGetLastError ();
34+ #elif POSIX
35+ return errno;
36+ #else
37+ #error "Undefine platform"
38+ #endif
39+ }
40+
3041 Socket::Socket (): socket_handle(~0 )
3142 {
3243
@@ -47,16 +58,16 @@ namespace HttpServer
4758 obj.socket_handle = ~0 ;
4859 }
4960
50- System::native_socket_type Socket::open ()
61+ bool Socket::open ()
5162 {
5263 close ();
5364
5465 socket_handle = ::socket (AF_INET, SOCK_STREAM, 0 );
5566
56- return socket_handle ;
67+ return is_open () ;
5768 }
5869
59- int Socket::close ()
70+ bool Socket::close ()
6071 {
6172 if (is_open () )
6273 {
@@ -71,15 +82,15 @@ namespace HttpServer
7182 if (0 == result)
7283 {
7384 socket_handle = ~0 ;
74- }
7585
76- return result;
86+ return true ;
87+ }
7788 }
7889
79- return ~ 0 ;
90+ return false ;
8091 }
8192
82- int Socket::bind (const int port) const
93+ bool Socket::bind (const int port) const
8394 {
8495 const ::sockaddr_in sock_addr = {
8596 AF_INET,
@@ -88,12 +99,12 @@ namespace HttpServer
8899 0
89100 };
90101
91- return ::bind (socket_handle, reinterpret_cast <const sockaddr *>(&sock_addr), sizeof (sockaddr_in) );
102+ return 0 == ::bind (socket_handle, reinterpret_cast <const sockaddr *>(&sock_addr), sizeof (sockaddr_in) );
92103 }
93104
94- int Socket::listen () const
105+ bool Socket::listen () const
95106 {
96- return ::listen (socket_handle, SOMAXCONN);
107+ return 0 == ::listen (socket_handle, SOMAXCONN);
97108 }
98109
99110 Socket Socket::accept () const
@@ -170,20 +181,20 @@ namespace HttpServer
170181 return Socket (client_socket);
171182 }
172183
173- int Socket::shutdown () const
184+ bool Socket::shutdown () const
174185 {
175186 if (is_open () )
176187 {
177188 #ifdef WIN32
178- return ::shutdown (socket_handle, SD_BOTH);
189+ return 0 == ::shutdown (socket_handle, SD_BOTH);
179190 #elif POSIX
180- return ::shutdown (socket_handle, SHUT_RDWR);
191+ return 0 == ::shutdown (socket_handle, SHUT_RDWR);
181192 #else
182193 #error "Undefine platform"
183194 #endif
184195 }
185196
186- return - 1 ;
197+ return false ;
187198 }
188199
189200 bool Socket::nonblock (const bool isNonBlock) const
@@ -192,32 +203,34 @@ namespace HttpServer
192203 unsigned long value = isNonBlock;
193204 return 0 == ::ioctlsocket (socket_handle, FIONBIO, &value);
194205 #elif POSIX
195- return - 1 != ::fcntl (socket_handle, F_SETFL, isNonBlock ? O_NONBLOCK : O_SYNC);
206+ return ~ 0 != ::fcntl (socket_handle, F_SETFL, isNonBlock ? O_NONBLOCK : O_SYNC);
196207 #else
197208 #error "Undefine platform"
198209 #endif
199210 }
200211
201- /* bool Socket::is_nonblock() const
212+ /*
213+ bool Socket::is_nonblock() const
202214 {
203215 #ifdef WIN32
204216
205217 #elif POSIX
206- int flags = ::fcntl(socket_handle, F_GETFL, 0);
207- return (flags != -1 ) && (flags & O_NONBLOCK);
218+ const int flags = ::fcntl(socket_handle, F_GETFL, 0);
219+ return (flags != ~0 ) && (flags & O_NONBLOCK);
208220 #else
209221 #error "Undefine platform"
210222 #endif
211- }*/
223+ }
224+ */
212225
213226 bool Socket::tcp_nodelay (const bool nodelay) const
214227 {
215228 #ifdef WIN32
216229 int flags = nodelay ? 1 : 0 ;
217- return 0 == setsockopt (socket_handle, IPPROTO_TCP, TCP_NODELAY, ( char *) &flags, sizeof (flags) );
230+ return 0 == setsockopt (socket_handle, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast < char *>( &flags) , sizeof (flags) );
218231 #elif POSIX
219232 int flags = nodelay ? 1 : 0 ;
220- return 0 == setsockopt (socket_handle, IPPROTO_TCP, TCP_NODELAY, ( char *) &flags, sizeof (flags) );
233+ return 0 == setsockopt (socket_handle, IPPROTO_TCP, TCP_NODELAY, &flags, sizeof (flags) );
221234 #else
222235 #error "Undefine platform"
223236 #endif
0 commit comments