| /* |
| * Copyright (C) Tildeslash Ltd. All rights reserved. |
| * |
| * This program is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU Affero General Public License version 3. |
| * |
| * 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 Affero General Public License for more details. |
| * |
| * You should have received a copy of the GNU Affero General Public License |
| * along with this program. If not, see <http://www.gnu.org/licenses/>. |
| * |
| * In addition, as a special exception, the copyright holders give |
| * permission to link the code of portions of this program with the |
| * OpenSSL library under certain conditions as described in each |
| * individual source file, and distribute linked combinations |
| * including the two. |
| * |
| * You must obey the GNU Affero General Public License in all respects |
| * for all of the code used other than OpenSSL. |
| */ |
| |
| |
| #ifndef NET_INCLUDED |
| #define NET_INCLUDED |
| #include <sys/types.h> |
| #include <sys/socket.h> |
| |
| |
| /** |
| * Facade for system specific network and socket operation. |
| * |
| * @see http://www.mmonit.com/ |
| * @file |
| */ |
| |
| |
| /** |
| * Number of milli seconds before a socket write timeout |
| */ |
| #define NET_WRITE_TIMEOUT 3000 |
| |
| /** |
| * Number of milli seconds before a socket read timeout |
| */ |
| #define NET_READ_TIMEOUT 3000 |
| |
| |
| /** |
| * Enable nonblocking i|o on the given socket. |
| * @param socket A socket |
| * @return true if success, otherwise false |
| */ |
| int Net_setNonBlocking(int socket); |
| |
| |
| /** |
| * Disable nonblocking i|o on the given socket |
| * @param socket A socket |
| * @return true if success, otherwise false |
| */ |
| int Net_setBlocking(int socket); |
| |
| |
| /** |
| * Check if data is available, if not, wait timeout milliseconds for data |
| * to be present. |
| * @param socket A socket |
| * @param milliseconds How long to wait before timeout |
| * @return true if the event occured, otherwise false. |
| */ |
| int Net_canRead(int socket, time_t milliseconds); |
| |
| |
| /** |
| * Check if data can be sent to the socket, if not, wait timeout |
| * milliseconds for the socket to be ready. |
| * @param socket A socket |
| * @param milliseconds How long to wait before timeout |
| * @return true if the event occured, otherwise false. |
| */ |
| int Net_canWrite(int socket, time_t milliseconds); |
| |
| |
| /** |
| * Read up to size bytes from the <code>socket</code> into the |
| * <code>buffer</code>. If data is not available wait for |
| * <code>timeout</code> milliseconds. |
| * @param socket the Socket to read data from |
| * @param buffer The buffer to write the data to |
| * @param size Number of bytes to read from the socket |
| * @param timeout Milliseconds to wait for data to be available |
| * @return The number of bytes read or -1 if an error occured. |
| */ |
| size_t Net_read(int socket, void *buffer, size_t size, time_t timeout); |
| |
| |
| /** |
| * Write <code>size</code> bytes from the <code>buffer</code> to the |
| * <code>socket</code> |
| * @param socket the Socket to write to |
| * @param buffer The buffer to write |
| * @param size Number of bytes to send |
| * @param timeout Milliseconds to wait for data to be sent |
| * @return The number of bytes sent or -1 if an error occured. |
| */ |
| size_t Net_write(int socket, const void *buffer, size_t size, time_t timeout); |
| |
| |
| /** |
| * Returns true if fd is a socket otherwise, false. |
| * @param fd File descriptor to test |
| * @return true if fd is a socket, otherwise false. |
| */ |
| int Net_isSocket(int fd); |
| |
| #endif |