From e90d606f0ad56146e8686acfdfd357005fa5b4a6 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 15 Jan 2013 22:39:51 +0100 Subject: socket_util: convert to C++ --- Makefile.am | 5 +-- src/ServerSocket.cxx | 2 +- src/SocketUtil.cxx | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/SocketUtil.hxx | 58 +++++++++++++++++++++++++++++ src/socket_util.c | 102 --------------------------------------------------- src/socket_util.h | 66 --------------------------------- 6 files changed, 163 insertions(+), 172 deletions(-) create mode 100644 src/SocketUtil.cxx create mode 100644 src/SocketUtil.hxx delete mode 100644 src/socket_util.c delete mode 100644 src/socket_util.h diff --git a/Makefile.am b/Makefile.am index 9782cef5b..875ea4ccc 100644 --- a/Makefile.am +++ b/Makefile.am @@ -124,7 +124,6 @@ mpd_headers = \ src/TimePrint.cxx src/TimePrint.hxx \ src/song.h \ src/song_sort.c src/song_sort.h \ - src/socket_util.h \ src/stats.h \ src/tag.h \ src/tag_internal.h \ @@ -280,7 +279,7 @@ src_mpd_SOURCES = \ src/SongPrint.cxx src/SongPrint.hxx \ src/SongSave.cxx src/SongSave.hxx \ src/resolver.c src/resolver.h \ - src/socket_util.c \ + src/SocketUtil.cxx src/SocketUtil.hxx \ src/StateFile.cxx src/StateFile.hxx \ src/Stats.cxx \ src/Tag.cxx \ @@ -1288,7 +1287,7 @@ test_run_output_SOURCES = test/run_output.cxx \ src/timer.c src/clock.c \ src/Tag.cxx src/TagNames.c src/TagPool.cxx \ src/page.c \ - src/socket_util.c \ + src/SocketUtil.cxx \ src/resolver.c \ src/OutputInit.cxx src/OutputFinish.cxx src/OutputList.cxx \ src/OutputPlugin.cxx \ diff --git a/src/ServerSocket.cxx b/src/ServerSocket.cxx index 7127d3bdb..7f2853e20 100644 --- a/src/ServerSocket.cxx +++ b/src/ServerSocket.cxx @@ -24,7 +24,7 @@ #endif #include "ServerSocket.hxx" -#include "socket_util.h" +#include "SocketUtil.hxx" #include "resolver.h" #include "fd_util.h" #include "glib_socket.h" diff --git a/src/SocketUtil.cxx b/src/SocketUtil.cxx new file mode 100644 index 000000000..6974c0df3 --- /dev/null +++ b/src/SocketUtil.cxx @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" +#include "SocketUtil.hxx" +#include "fd_util.h" + +#include + +#include +#include + +#ifndef G_OS_WIN32 +#include +#else /* G_OS_WIN32 */ +#include +#include +#endif /* G_OS_WIN32 */ + +#ifdef HAVE_IPV6 +#include +#endif + +static GQuark +listen_quark(void) +{ + return g_quark_from_static_string("listen"); +} + +int +socket_bind_listen(int domain, int type, int protocol, + const struct sockaddr *address, size_t address_length, + int backlog, + GError **error) +{ + int fd, ret; + const int reuse = 1; + + fd = socket_cloexec_nonblock(domain, type, protocol); + if (fd < 0) { + g_set_error(error, listen_quark(), errno, + "Failed to create socket: %s", g_strerror(errno)); + return -1; + } + + ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, + (const char *) &reuse, sizeof(reuse)); + if (ret < 0) { + g_set_error(error, listen_quark(), errno, + "setsockopt() failed: %s", g_strerror(errno)); + close_socket(fd); + return -1; + } + + ret = bind(fd, address, address_length); + if (ret < 0) { + g_set_error(error, listen_quark(), errno, + "%s", g_strerror(errno)); + close_socket(fd); + return -1; + } + + ret = listen(fd, backlog); + if (ret < 0) { + g_set_error(error, listen_quark(), errno, + "listen() failed: %s", g_strerror(errno)); + close_socket(fd); + return -1; + } + +#ifdef HAVE_STRUCT_UCRED + setsockopt(fd, SOL_SOCKET, SO_PASSCRED, + (const char *) &reuse, sizeof(reuse)); +#endif + + return fd; +} + +int +socket_keepalive(int fd) +{ + const int reuse = 1; + + return setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, + (const char *)&reuse, sizeof(reuse)); +} diff --git a/src/SocketUtil.hxx b/src/SocketUtil.hxx new file mode 100644 index 000000000..3d0be78c4 --- /dev/null +++ b/src/SocketUtil.hxx @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2003-2013 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +/* + * This library provides easy helper functions for working with + * sockets. + * + */ + +#ifndef MPD_SOCKET_UTIL_HXX +#define MPD_SOCKET_UTIL_HXX + +#include "gerror.h" + +#include + +struct sockaddr; + +/** + * Creates a socket listening on the specified address. This is a + * shortcut for socket(), bind() and listen(). + * + * @param domain the socket domain, e.g. PF_INET6 + * @param type the socket type, e.g. SOCK_STREAM + * @param protocol the protocol, usually 0 to let the kernel choose + * @param address the address to listen on + * @param address_length the size of #address + * @param backlog the backlog parameter for the listen() system call + * @param error location to store the error occurring, or NULL to + * ignore errors + * @return the socket file descriptor or -1 on error + */ +int +socket_bind_listen(int domain, int type, int protocol, + const struct sockaddr *address, size_t address_length, + int backlog, + GError **error); + +int +socket_keepalive(int fd); + +#endif diff --git a/src/socket_util.c b/src/socket_util.c deleted file mode 100644 index ee8bf7e1a..000000000 --- a/src/socket_util.c +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "socket_util.h" -#include "fd_util.h" - -#include - -#include -#include - -#ifndef G_OS_WIN32 -#include -#else /* G_OS_WIN32 */ -#include -#include -#endif /* G_OS_WIN32 */ - -#ifdef HAVE_IPV6 -#include -#endif - -static GQuark -listen_quark(void) -{ - return g_quark_from_static_string("listen"); -} - -int -socket_bind_listen(int domain, int type, int protocol, - const struct sockaddr *address, size_t address_length, - int backlog, - GError **error) -{ - int fd, ret; - const int reuse = 1; - - fd = socket_cloexec_nonblock(domain, type, protocol); - if (fd < 0) { - g_set_error(error, listen_quark(), errno, - "Failed to create socket: %s", g_strerror(errno)); - return -1; - } - - ret = setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, - (const char *) &reuse, sizeof(reuse)); - if (ret < 0) { - g_set_error(error, listen_quark(), errno, - "setsockopt() failed: %s", g_strerror(errno)); - close_socket(fd); - return -1; - } - - ret = bind(fd, address, address_length); - if (ret < 0) { - g_set_error(error, listen_quark(), errno, - "%s", g_strerror(errno)); - close_socket(fd); - return -1; - } - - ret = listen(fd, backlog); - if (ret < 0) { - g_set_error(error, listen_quark(), errno, - "listen() failed: %s", g_strerror(errno)); - close_socket(fd); - return -1; - } - -#ifdef HAVE_STRUCT_UCRED - setsockopt(fd, SOL_SOCKET, SO_PASSCRED, - (const char *) &reuse, sizeof(reuse)); -#endif - - return fd; -} - -int -socket_keepalive(int fd) -{ - const int reuse = 1; - - return setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, - (const char *)&reuse, sizeof(reuse)); -} diff --git a/src/socket_util.h b/src/socket_util.h deleted file mode 100644 index 3f602cd53..000000000 --- a/src/socket_util.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * This library provides easy helper functions for working with - * sockets. - * - */ - -#ifndef SOCKET_UTIL_H -#define SOCKET_UTIL_H - -#include "gerror.h" - -#include - -struct sockaddr; - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Creates a socket listening on the specified address. This is a - * shortcut for socket(), bind() and listen(). - * - * @param domain the socket domain, e.g. PF_INET6 - * @param type the socket type, e.g. SOCK_STREAM - * @param protocol the protocol, usually 0 to let the kernel choose - * @param address the address to listen on - * @param address_length the size of #address - * @param backlog the backlog parameter for the listen() system call - * @param error location to store the error occurring, or NULL to - * ignore errors - * @return the socket file descriptor or -1 on error - */ -int -socket_bind_listen(int domain, int type, int protocol, - const struct sockaddr *address, size_t address_length, - int backlog, - GError **error); - -int -socket_keepalive(int fd); - -#ifdef __cplusplus -} -#endif - -#endif -- cgit v1.2.3