blocxx
src
blocxx
SocketImpl.cpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* Copyright (C) 2005, Vintela, Inc. All rights reserved.
3
* Copyright (C) 2006, Novell, Inc. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of
14
* Vintela, Inc.,
15
* nor Novell, Inc.,
16
* nor the names of its contributors or employees may be used to
17
* endorse or promote products derived from this software without
18
* specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
31
*******************************************************************************/
32
33
42
43
#include "blocxx/BLOCXX_config.h"
44
#include "
blocxx/SocketImpl.hpp
"
45
#include "
blocxx/SignalScope.hpp
"
46
47
namespace
BLOCXX_NAMESPACE
48
{
49
51
SocketImpl::SocketImpl
()
52
:
SocketBaseImpl
()
53
{
54
}
55
56
SocketImpl::SocketImpl
(
SocketHandle_t
fd,
SocketAddress::AddressType
addrType)
57
:
SocketBaseImpl
(fd, addrType)
58
{
59
}
60
61
SocketImpl::SocketImpl
(
const
SocketAddress
& addr)
62
:
SocketBaseImpl
(addr)
63
{
64
}
65
66
SocketImpl::~SocketImpl
()
67
{
68
}
69
70
Select_t
71
SocketImpl::getSelectObj
()
const
72
{
73
#if defined(BLOCXX_WIN32)
74
Select_t
st;
75
st.event = m_event;
76
st.sockfd =
m_sockfd
;
77
st.isSocket =
true
;
78
st.networkevents = FD_READ | FD_WRITE;
79
st.doreset =
true
;
80
return
st;
81
#else
82
return
m_sockfd
;
83
#endif
84
}
85
86
int
SocketImpl::readAux
(
void
* dataIn,
int
dataInLen)
87
{
88
#if defined(BLOCXX_WIN32)
89
return ::recv(
m_sockfd
,
static_cast<
char
*
>
(dataIn), dataInLen, 0);
90
#else
91
return ::read(
m_sockfd
, dataIn, dataInLen);
92
#endif
93
}
94
95
int
SocketImpl::writeAux
(
const
void
* dataOut,
int
dataOutLen)
96
{
97
#if defined(BLOCXX_WIN32)
98
return ::send(
m_sockfd
,
static_cast<
const
char
*
>
(dataOut), dataOutLen, 0);
99
#else
100
// block SIGPIPE so we don't kill the process if the socket is closed.
101
SignalScope
ss(SIGPIPE, SIG_IGN);
102
return ::write(
m_sockfd
, dataOut, dataOutLen);
103
#endif
104
}
105
107
108
}
// end namespace BLOCXX_NAMESPACE
109
SignalScope.hpp
SocketImpl.hpp
BLOCXX_NAMESPACE::SignalScope
Definition
SignalScope.hpp:70
BLOCXX_NAMESPACE::SocketAddress
Definition
SocketAddress.hpp:56
BLOCXX_NAMESPACE::SocketAddress::AddressType
AddressType
Definition
SocketAddress.hpp:61
BLOCXX_NAMESPACE::SocketBaseImpl::m_sockfd
SocketHandle_t m_sockfd
Definition
SocketBaseImpl.hpp:105
BLOCXX_NAMESPACE::SocketBaseImpl::SocketBaseImpl
SocketBaseImpl()
Definition
SocketBaseImpl.cpp:97
BLOCXX_NAMESPACE::SocketImpl::~SocketImpl
virtual ~SocketImpl()
Definition
SocketImpl.cpp:66
BLOCXX_NAMESPACE::SocketImpl::SocketImpl
SocketImpl()
Definition
SocketImpl.cpp:51
BLOCXX_NAMESPACE::SocketImpl::getSelectObj
Select_t getSelectObj() const
Definition
SocketImpl.cpp:71
BLOCXX_NAMESPACE::SocketImpl::writeAux
virtual int writeAux(const void *dataOut, int dataOutLen)
Definition
SocketImpl.cpp:95
BLOCXX_NAMESPACE::SocketImpl::readAux
virtual int readAux(void *dataIn, int dataInLen)
Definition
SocketImpl.cpp:86
BLOCXX_NAMESPACE
Taken from RFC 1321.
Definition
AppenderLogger.cpp:48
BLOCXX_NAMESPACE::Select_t
int Select_t
Definition
NetworkTypes.hpp:146
BLOCXX_NAMESPACE::SocketHandle_t
int SocketHandle_t
Definition
NetworkTypes.hpp:97
Generated by
1.13.2