Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Mike Perry
Tor
Commits
c612ddee
Commit
c612ddee
authored
Sep 28, 2010
by
Nick Mathewson
🎨
Browse files
Add a new option to enable/disable IOCP support
parent
d6e255ed
Changes
6
Hide whitespace changes
Inline
Side-by-side
changes/bufferevent-support
View file @
c612ddee
...
...
@@ -6,4 +6,7 @@
flag. Using this feature will make our networking code more flexible,
lets us stack layers on each other, and let us use more efficient
zero-copy transports where available.
- As an experimental feature, when using the "bufferevents" buffered
IO backend, Tor can try to use Windows's IOCP networking API. This
is off by default. To turn it on, add "DisableIOCP 0" to your torrc.
doc/tor.1.txt
View file @
c612ddee
...
...
@@ -397,6 +397,11 @@ Other options can be specified either on the command-line (--option
networkstatus. This is an advanced option; you generally shouldn't have
to mess with it. (Default: not set.)
**DisableIOCP** **0**|**1**::
If Tor was built to use the Libevent's "bufferevents" networking code
and you're running on Windows, setting this option to 1 will tell Libevent
not to use the Windows IOCP networking API. (Default: 1)
CLIENT OPTIONS
--------------
...
...
src/common/compat_libevent.c
View file @
c612ddee
...
...
@@ -159,7 +159,7 @@ struct event_base *the_event_base = NULL;
/** Initialize the Libevent library and set up the event base. */
void
tor_libevent_initialize
(
void
)
tor_libevent_initialize
(
tor_libevent_cfg
*
torcfg
)
{
tor_assert
(
the_event_base
==
NULL
);
...
...
@@ -171,7 +171,21 @@ tor_libevent_initialize(void)
#endif
#ifdef HAVE_EVENT2_EVENT_H
the_event_base
=
event_base_new
();
{
struct
event_config
*
cfg
=
event_config_new
();
#if defined(MS_WINDOWS) && defined(USE_BUFFEREVENTS)
if
(
!
torcfg
->
disable_iocp
)
event_config_set_flag
(
cfg
,
EVENT_BASE_FLAG_STARTUP_IOCP
);
#endif
#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,0,7)
if
(
torcfg
->
num_cpus
>
0
)
event_config_set_num_cpus_hint
(
cfg
,
torcfg
->
num_cpus
);
#endif
the_event_base
=
event_base_new_with_config
(
cfg
);
}
#else
the_event_base
=
event_init
();
#endif
...
...
src/common/compat_libevent.h
View file @
c612ddee
...
...
@@ -56,7 +56,12 @@ struct timeval;
int
tor_event_base_loopexit
(
struct
event_base
*
base
,
struct
timeval
*
tv
);
#endif
void
tor_libevent_initialize
(
void
);
typedef
struct
tor_libevent_cfg
{
int
disable_iocp
;
int
num_cpus
;
}
tor_libevent_cfg
;
void
tor_libevent_initialize
(
tor_libevent_cfg
*
cfg
);
struct
event_base
*
tor_libevent_get_base
(
void
);
const
char
*
tor_libevent_get_method
(
void
);
void
tor_check_libevent_version
(
const
char
*
m
,
int
server
,
...
...
src/or/config.c
View file @
c612ddee
...
...
@@ -224,6 +224,7 @@ static config_var_t _option_vars[] = {
V
(
DirReqStatistics
,
BOOL
,
"0"
),
VAR
(
"DirServer"
,
LINELIST
,
DirServers
,
NULL
),
V
(
DisableAllSwap
,
BOOL
,
"0"
),
V
(
DisableIOCP
,
BOOL
,
"1"
),
V
(
DNSPort
,
UINT
,
"0"
),
V
(
DNSListenAddress
,
LINELIST
,
NULL
),
V
(
DownloadExtraInfo
,
BOOL
,
"0"
),
...
...
@@ -554,7 +555,7 @@ static int is_listening_on_low_port(uint16_t port_option,
static
uint64_t
config_parse_memunit
(
const
char
*
s
,
int
*
ok
);
static
int
config_parse_interval
(
const
char
*
s
,
int
*
ok
);
static
void
init_libevent
(
void
);
static
void
init_libevent
(
const
or_options_t
*
options
);
static
int
opt_streq
(
const
char
*
s1
,
const
char
*
s2
);
/** Magic value for or_options_t. */
...
...
@@ -955,7 +956,7 @@ options_act_reversible(or_options_t *old_options, char **msg)
/* Set up libevent. (We need to do this before we can register the
* listeners as listeners.) */
if
(
running_tor
&&
!
libevent_initialized
)
{
init_libevent
();
init_libevent
(
options
);
libevent_initialized
=
1
;
}
...
...
@@ -4895,9 +4896,12 @@ config_parse_interval(const char *s, int *ok)
* Initialize the libevent library.
*/
static
void
init_libevent
(
void
)
init_libevent
(
const
or_options_t
*
options
)
{
const
char
*
badness
=
NULL
;
tor_libevent_cfg
cfg
;
tor_assert
(
options
);
configure_libevent_logging
();
/* If the kernel complains that some method (say, epoll) doesn't
...
...
@@ -4907,7 +4911,11 @@ init_libevent(void)
tor_check_libevent_header_compatibility
();
tor_libevent_initialize
();
memset
(
&
cfg
,
0
,
sizeof
(
cfg
));
cfg
.
disable_iocp
=
options
->
DisableIOCP
;
cfg
.
num_cpus
=
options
->
NumCpus
;
tor_libevent_initialize
(
&
cfg
);
suppress_libevent_log_msg
(
NULL
);
...
...
src/or/or.h
View file @
c612ddee
...
...
@@ -2892,6 +2892,10 @@ typedef struct {
*/
double
CircuitPriorityHalflife
;
/** If true, do not enable IOCP on windows with bufferevents, even if
* we think we could. */
int
DisableIOCP
;
}
or_options_t
;
/** Persistent state for an onion router, as saved to disk. */
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment