1 /*
2 Network utilities for the Midnight Commander Virtual File System.
3
4 Copyright (C) 1995-2025
5 Free Software Foundation, Inc.
6
7 This file is part of the Midnight Commander.
8
9 The Midnight Commander is free software: you can redistribute it
10 and/or modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation, either version 3 of the License,
12 or (at your option) any later version.
13
14 The Midnight Commander 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
20 along with this program. If not, see <https://www.gnu.org/licenses/>.
21 */
22
23 /**
24 * \file
25 * \brief Source: Virtual File System: Network utilities
26 */
27
28 #include <config.h>
29
30 #include <stdlib.h>
31 #include <signal.h>
32 #include <string.h> // memset()
33
34 #include "lib/global.h"
35 #include "lib/util.h"
36
37 #include "netutil.h"
38
39 /*** global variables ****************************************************************************/
40
41 SIG_ATOMIC_VOLATILE_T got_sigpipe = 0;
42
43 /*** file scope macro definitions ****************************************************************/
44
45 /*** file scope type declarations ****************************************************************/
46
47 /*** forward declarations (file scope functions) *************************************************/
48
49 /*** file scope variables ************************************************************************/
50
51 /* --------------------------------------------------------------------------------------------- */
52 /*** file scope functions ************************************************************************/
53 /* --------------------------------------------------------------------------------------------- */
54
55 static void
56 sig_pipe (int unused)
/* ![[previous]](../icons/n_left.png)
![[next]](../icons/right.png)
![[first]](../icons/n_first.png)
![[last]](../icons/last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
57 {
58 (void) unused;
59 got_sigpipe = 1;
60 }
61
62 /* --------------------------------------------------------------------------------------------- */
63 /*** public functions ****************************************************************************/
64 /* --------------------------------------------------------------------------------------------- */
65
66 void
67 tcp_init (void)
/* ![[previous]](../icons/left.png)
![[next]](../icons/n_right.png)
![[first]](../icons/first.png)
![[last]](../icons/n_last.png)
![[top]](../icons/top.png)
![[bottom]](../icons/bottom.png)
![[index]](../icons/index.png)
*/
68 {
69 static gboolean initialized = FALSE;
70 struct sigaction sa;
71
72 if (initialized)
73 return;
74
75 got_sigpipe = 0;
76 memset (&sa, 0, sizeof (sa));
77 sa.sa_handler = sig_pipe;
78 sigemptyset (&sa.sa_mask);
79 my_sigaction (SIGPIPE, &sa, NULL);
80
81 initialized = TRUE;
82 }
83
84 /* --------------------------------------------------------------------------------------------- */