-unsigned Socket::do_write(const char *buf, unsigned size)
-{
- check_state(true);
-
- if(size==0)
- return 0;
-
- int ret = ::send(handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw SystemError("Writing to socket failed", errno);
- }
-
- return ret;
-}
-
-unsigned Socket::do_read(char *buf, unsigned size)
-{
- check_state(true);
-
- if(size==0)
- return 0;
-
- int ret = ::recv(handle, buf, size, 0);
- if(ret<0)
- {
- if(errno==EAGAIN)
- return 0;
- else
- throw SystemError("Reading from socket failed", errno);
- }
- else if(ret==0 && !eof_flag)
- {
- eof_flag = true;
- signal_end_of_file.emit();
- set_events(IO::P_NONE);
- }
-
- return ret;
-}
-