libassa
3.5.1
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
assa
FdSet.cpp
Go to the documentation of this file.
1
// -*- c++ -*-
2
//------------------------------------------------------------------------------
3
// FdSet.cpp
4
//------------------------------------------------------------------------------
5
// Copyright (C) 2006 Vladislav Grinchenko
6
//
7
// This library is free software; you can redistribute it and/or
8
// modify it under the terms of the GNU Library General Public
9
// License as published by the Free Software Foundation; either
10
// version 2 of the License, or (at your option) any later version.
11
//------------------------------------------------------------------------------
12
13
#include "
FdSet.h
"
14
#include "
Logger.h
"
15
16
using namespace
ASSA;
17
18
bool
19
FdSet::
20
setFd
(
handler_t
fd_)
21
{
22
FD_SET (fd_,
this
);
23
24
#if !defined (WIN32)
25
ActiveFDs_Iter
iter;
26
iter = std::find (
m_actfds
.begin (),
27
m_actfds
.end (),
28
fd_);
29
if
(iter ==
m_actfds
.end ()) {
// not found
30
m_actfds
.push_back (fd_);
31
}
32
#endif
33
34
return
true
;
35
}
36
37
bool
38
FdSet::
39
clear
(
handler_t
fd_)
40
{
41
DL
((
REACT
,
"Clearing fd=%d\n"
, fd_));
42
43
if
(!
isSet
(fd_)) {
44
DL
((
REACT
,
"Not set! - ignoring.\n"
));
45
return
false
;
46
}
47
48
FD_CLR (fd_,
this
);
49
if
(FD_ISSET (fd_,
this
)) {
50
DL
((
REACT
,
"Woop - an error! FD_CLR failed!\n"
));
51
}
52
53
#if !defined (WIN32)
54
ActiveFDs_Iter
iter;
55
iter = std::find (
m_actfds
.begin (),
56
m_actfds
.end (),
57
fd_);
58
if
(iter !=
m_actfds
.end ()) {
59
DL
((
REACT
,
"fd=%d found and erased\n"
, fd_));
60
m_actfds
.erase (iter);
61
}
62
else
{
63
DL
((
REACT
,
"fd=%d not found in m_actfds list!\n"
, fd_));
64
}
65
#endif
66
67
return
true
;
68
}
69
70
void
71
FdSet::
72
sync
()
73
{
74
#if !defined (WIN32)
75
ActiveFDs_Iter
iter;
76
restart:
77
iter =
m_actfds
.begin ();
78
while
(iter !=
m_actfds
.end ()) {
79
if
(!
isSet
(*iter)) {
80
m_actfds
.erase (iter);
81
goto
restart;
82
}
83
iter++;
84
}
85
#endif
86
}
87
88
void
89
FdSet::
90
reset
()
91
{
92
::memset(
this
, 0,
sizeof
(fd_set));
93
94
#if !defined (WIN32)
95
m_actfds
.clear ();
96
#endif
97
}
98
99
int
100
FdSet::
101
maxInSet
()
102
{
103
#if defined (WIN32)
104
return
0;
// win32 select doesn't need this value
105
#else
106
if
(
m_actfds
.size () == 0) {
107
return
0;
108
}
109
ActiveFDs_Iter
iter = std::max_element (
m_actfds
.begin (),
m_actfds
.end ());
110
return
(*iter);
111
#endif
112
}
113
114
std::string
115
FdSet::
116
dump_c_str
()
117
{
118
std::ostringstream report;
119
120
report <<
" enabled="
<<
numSet
();
121
122
#if defined (WIN32)
123
if
(this->fd_count) {
124
report <<
" : "
;
125
}
126
for
(
int
i=0; i < this->fd_count; i++) {
127
report <<
" "
<< this->fd_array[i];
128
}
129
#else
/* UNIX */
130
ActiveFDs_Iter
iter =
m_actfds
.begin ();
131
if
(
m_actfds
.size ()) {
132
report <<
" : "
;
133
}
134
while
(iter !=
m_actfds
.end ()) {
135
report <<
" "
<< (
u_int
)*iter;
136
iter++;
137
}
138
#endif
139
140
report <<
std::ends
;
141
return
(report.str ());
142
}
143
Generated on Wed Jun 13 2012 09:30:36 for libassa by
1.8.1