1 /****h* silcutil/silcnet.h
9 * Author: Pekka Riikonen <priikone@silcnet.org>
11 * Copyright (C) 1997 - 2001 Pekka Riikonen
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
25 * SILC Net API provides various network routines for applications. It
26 * can be used to create TCP/IP connections and servers. Various utility
27 * functions for resolving various information is also provided.
29 * On WIN32 systems the SILC Net API must initialized by calling the
30 * silc_net_win32_init and uninitialized when the application ends by
31 * calling the silc_net_win32_uninit function. The initializing must be
32 * done in order to assure that the SILC Net API works correctly.
41 /****f* silcutil/SilcNetAPI/silc_net_create_server
45 * int silc_net_create_server(int port, char *ip_addr);
49 * This function creates server or daemon or listener or what ever. This
50 * does not fork a new process, it must be done by the caller if caller
51 * wants to create a child process. This is used by the SILC server.
52 * If argument `ip_addr' is NULL `any' address will be used. Returns
53 * the created socket or -1 on error.
56 int silc_net_create_server(int port, char *ip_addr);
58 /****f* silcutil/SilcNetAPI/silc_net_close_server
62 * void silc_net_close_server(int sock);
66 * Closes the server by closing the socket connection.
69 void silc_net_close_server(int sock);
71 /****f* silcutil/SilcNetAPI/silc_net_create_connection
75 * int silc_net_create_connection(int port, char *host);
79 * Creates a connection (TCP/IP) to a remote host. Returns the connection
80 * socket or -1 on error. This blocks the process while trying to create
84 int silc_net_create_connection(int port, char *host);
86 /****f* silcutil/SilcNetAPI/silc_net_create_connection_async
90 * int silc_net_create_connection_async(int port, char *host);
94 * Creates a connection (TCP/IP) to a remote host. Returns the connection
95 * socket or -1 on error. This creates non-blocking socket hence the
96 * connection returns directly. To get the result of the connect() one
97 * must select() the socket and read the result after it's ready.
100 int silc_net_create_connection_async(int port, char *host);
102 /****f* silcutil/SilcNetAPI/silc_net_close_connection
106 * void silc_net_close_connection(int sock);
110 * Closes the connection by closing the socket connection.
113 void silc_net_close_connection(int sock);
115 /****f* silcutil/SilcNetAPI/silc_net_accept_connection
119 * int silc_net_accept_connection(int sock);
123 * Accepts a connection from a particular socket.
126 int silc_net_accept_connection(int sock);
128 /****f* silcutil/SilcNetAPI/silc_net_set_socket_nonblock
132 * int silc_net_set_socket_nonblock(int sock);
136 * Sets the socket to non-blocking mode.
139 int silc_net_set_socket_nonblock(int sock);
141 /****f* silcutil/SilcNetAPI/silc_net_set_socket_opt
145 * int silc_net_set_socket_opt(int sock, int level, int option, int on);
149 * Sets a option for a socket. This function can be used to set
150 * various options for the socket. Some of the options might be
154 int silc_net_set_socket_opt(int sock, int level, int option, int on);
156 /****f* silcutil/SilcNetAPI/silc_net_get_socket_opt
160 * int silc_net_get_socket_opt(int sock, int level, int option,
161 * void *optval, int *opt_len);
165 * Return socket options to the `optval' and `opt_len'.
168 int silc_net_get_socket_opt(int sock, int level, int option,
169 void *optval, int *opt_len);
171 /****f* silcutil/SilcNetAPI/silc_net_is_ip
175 * bool silc_net_is_ip(const char *addr);
179 * Checks whether IP address sent as argument is valid IP address.
182 bool silc_net_is_ip(const char *addr);
184 /****f* silcutil/SilcNetAPI/silc_net_addr2bin
188 * bool silc_net_addr2bin(const char *addr, unsigned char *bin,
193 * Converts the IP number string from numbers-and-dots notation to
197 bool silc_net_addr2bin(const char *addr, unsigned char *bin,
200 /****f* silcutil/SilcNetAPI/silc_net_check_host_by_sock
204 * bool silc_net_check_host_by_sock(int sock, char **hostname, char **ip);
208 * Performs lookups for remote name and IP address. This peforms reverse
209 * lookup as well to verify that the IP has FQDN.
212 bool silc_net_check_host_by_sock(int sock, char **hostname, char **ip);
214 /****f* silcutil/SilcNetAPI/silc_net_check_local_by_sock
218 * bool silc_net_check_local_by_sock(int sock, char **hostname, char **ip);
222 * Performs lookups for local name and IP address. This peforms reverse
223 * lookup as well to verify that the IP has FQDN.
226 bool silc_net_check_local_by_sock(int sock, char **hostname, char **ip);
228 /****f* silcutil/SilcNetAPI/silc_net_get_remote_port
232 * uint16 silc_net_get_remote_port(int sock);
236 * Return remote port by socket.
239 uint16 silc_net_get_remote_port(int sock);
241 /****f* silcutil/SilcNetAPI/silc_net_get_local_port
245 * uint16 silc_net_get_local_port(int sock);
249 * Return local port by socket.
252 uint16 silc_net_get_local_port(int sock);
254 /****f* silcutil/SilcNetAPI/silc_net_localhost
258 * char *silc_net_localhost();
262 * Return name of localhost. This will also attempt to resolve
263 * the real hostname by the local host's IP address. If unsuccessful
264 * the first found hostname is returned.
267 char *silc_net_localhost();
271 /****f* silcutil/SilcNetAPI/silc_net_win32_init
275 * bool silc_net_win32_init(void);
279 * This is WIN32 system specific function and is used to initialize
280 * the network. This must be called by all WIN32 applications. It
281 * is usually called at the application's main() or WinMain() before
282 * calling any other SILC routine. The application must also call
283 * the silc_net_win32_uninit when exiting the application. Returns
284 * FALSE on error. The network will not work if this function returns
288 bool silc_net_win32_init(void);
290 /****f* silcutil/SilcNetAPI/silc_net_win32_uninit
294 * void silc_net_win32_init(void);
298 * This is WIN32 system specific function and is used to uninitialize
299 * the network. This must be called by all WIN32 applications. It
300 * is usually called when the application is exiting. After calling
301 * this function the SILC Net API routines will not work anymore.
304 void silc_net_win32_init(void);