OpenVPN
src
openvpn
fdmisc.c
Go to the documentation of this file.
1
/*
2
* OpenVPN -- An application to securely tunnel IP networks
3
* over a single UDP port, with support for SSL/TLS-based
4
* session authentication and key exchange,
5
* packet encryption, packet authentication, and
6
* packet compression.
7
*
8
* Copyright (C) 2002-2024 OpenVPN Inc <sales@openvpn.net>
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of the GNU General Public License version 2
12
* as published by the Free Software Foundation.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License along
20
* with this program; if not, write to the Free Software Foundation, Inc.,
21
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22
*/
23
24
#ifdef HAVE_CONFIG_H
25
#include "
config.h
"
26
#endif
27
28
#include "
syshead.h
"
29
30
#include "
fdmisc.h
"
31
#include "
error.h
"
32
33
#include "
memdbg.h
"
34
35
/* Set a file descriptor to non-blocking */
36
bool
37
set_nonblock_action
(
socket_descriptor_t
fd)
38
{
39
#ifdef _WIN32
40
u_long arg = 1;
41
if
(ioctlsocket(fd, FIONBIO, &arg))
42
{
43
return
false
;
44
}
45
#else
/* ifdef _WIN32 */
46
if
(fcntl(fd, F_SETFL, O_NONBLOCK) < 0)
47
{
48
return
false
;
49
}
50
#endif
51
return
true
;
52
}
53
54
/* Set a file descriptor to not be passed across execs */
55
bool
56
set_cloexec_action
(
socket_descriptor_t
fd)
57
{
58
#ifndef _WIN32
59
if
(fcntl(fd, F_SETFD, FD_CLOEXEC) < 0)
60
{
61
return
false
;
62
}
63
#endif
64
return
true
;
65
}
66
67
/* Set a file descriptor to non-blocking */
68
void
69
set_nonblock
(
socket_descriptor_t
fd)
70
{
71
if
(!
set_nonblock_action
(fd))
72
{
73
msg
(
M_ERR
,
"Set socket to non-blocking mode failed"
);
74
}
75
}
76
77
/* Set a file descriptor to not be passed across execs */
78
void
79
set_cloexec
(
socket_descriptor_t
fd)
80
{
81
if
(!
set_cloexec_action
(fd))
82
{
83
msg
(
M_ERR
,
"Set FD_CLOEXEC flag on file descriptor failed"
);
84
}
85
}
error.h
set_nonblock_action
bool set_nonblock_action(socket_descriptor_t fd)
Definition:
fdmisc.c:37
fdmisc.h
M_ERR
#define M_ERR
Definition:
error.h:105
set_cloexec_action
bool set_cloexec_action(socket_descriptor_t fd)
Definition:
fdmisc.c:56
set_nonblock
void set_nonblock(socket_descriptor_t fd)
Definition:
fdmisc.c:69
syshead.h
socket_descriptor_t
SOCKET socket_descriptor_t
Definition:
syshead.h:429
set_cloexec
void set_cloexec(socket_descriptor_t fd)
Definition:
fdmisc.c:79
config.h
memdbg.h
msg
#define msg(flags,...)
Definition:
error.h:144
Generated by
1.8.17