1
// Copyright (c) 2002-2004 Rob Kaper <rob@unixcode.org>. All rights reserved.
3
// Redistribution and use in source and binary forms, with or without
4
// modification, are permitted provided that the following conditions
7
// 1. Redistributions of source code must retain the above copyright
8
// notice, this list of conditions and the following disclaimer.
9
// 2. Redistributions in binary form must reproduce the above copyright
10
// notice, this list of conditions and the following disclaimer in the
11
// documentation and/or other materials provided with the distribution.
13
// THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS'' AND
14
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16
// ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19
// OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20
// HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34
Socket::Socket( int fd )
35
: m_status( Socket::New ),
40
int Socket::ioWrite(const std::string data)
42
if ( m_status == New || m_status == Ok )
44
write( m_fd, data.c_str(), strlen( data.c_str() ) );
50
bool Socket::hasReadLine()
52
static std::string newLine = "\r\n";
53
std::string::size_type pos = m_ioBuf.find_first_of(newLine);
55
return (!(pos == std::string::npos));
58
const std::string Socket::readLine()
60
static std::string newLine = "\r\n";
61
std::string::size_type pos = m_ioBuf.find_first_of(newLine);
63
if (pos != std::string::npos)
65
// Grab first part for the listener
66
std::string data = m_ioBuf.substr(0, pos);
68
// Remove grabbed part from buffer
69
m_ioBuf.erase(0, pos);
71
// Remove all subsequent newlines
72
m_ioBuf.erase(0, m_ioBuf.find_first_not_of(newLine));
79
void Socket::fillBuffer(const std::string data)