e2a21a2a7d8bad7a082a53134837a15c1bea740d
Stefan Schuermans v1.0.0

Stefan Schuermans authored 13 years ago

1) /*
2)  * FlexiPix library
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

3)  * !version: 1.0.6! !date: 2010-12-30!
Stefan Schuermans v1.0.0

Stefan Schuermans authored 13 years ago

4)  *
5)  * Copyright 2010 Stefan Schuermans <stefan schuermans info>
6)  *
7)  * This program is free software: you can redistribute it and/or modify
8)  * it under the terms of the GNU General Public License as published by
9)  * the Free Software Foundation, version 3 of the License.
10)  *
11)  *
12)  * This program is distributed in the hope that it will be useful,
13)  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15)  * GNU General Public License for more details.
16)  *
17)  * You should have received a copy of the GNU Lesser General Public License
18)  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19)  */
20) 
21) #ifndef FLP_NET_H
22) #define FLP_NET_H
23) 
24) #ifdef WINDOWS
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

25) #  include <stdint.h>
26) #  include <winsock2.h>
Stefan Schuermans v1.0.0

Stefan Schuermans authored 13 years ago

27) #else
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

28) #  include <arpa/inet.h>
29) #  include <errno.h>
30) #  include <netdb.h>
31) #  include <netinet/in.h>
32) #  include <string.h>
33) #  include <sys/socket.h>
34) #  include <unistd.h>
Stefan Schuermans v1.0.0

Stefan Schuermans authored 13 years ago

35) #endif
36) 
Stefan Schuermans v1.0.6

Stefan Schuermans authored 13 years ago

37) /** type of socket descriptor */
38) #ifdef WINDOWS
39) typedef SOCKET flp_sock_t;
40) #else
41) typedef int flp_sock_t;
42) #endif
43) 
44) #ifdef WINDOWS
45) /** IP address type missing on Windows */
46) typedef uint32_t in_addr_t;
47) #endif
48) 
49) #ifdef WINDOWS
50) /** port type missing on Windows */
51) typedef uint16_t in_port_t;
52) #endif
53) 
54) #ifndef WINDOWS
55) /** closesocket() only exists for Windows,other OSes just use close() */
56) extern inline int closesocket(int fd)
57) {
58)   return close(fd);
59) }
60) #endif
61) 
62) /**
63)  * \brief check a socket descriptor
64)  * \param[in] sock socket descriptor to check
65)  * \return 1 if valid, 0 if not valid
66)  */
67) extern inline int flp_sock_is_valid(flp_sock_t sock)
68) {
69) #ifdef WINDOWS
70)   return sock != INVALID_SOCKET;
71) #else
72)   return sock >= 0;
73) #endif
74) }
75) 
76) /**
77)  * \brief get error of last socket call as text
78)  * \param[in] buf pointer to buffer to place text into
79)  * \param[in] buflen size of buffer
80)  */
81) extern inline void flp_sock_get_last_error(char *buf, size_t buflen)
82) {
83) #ifdef WINDOWS
84)   int err = WSAGetLastError();
85)   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
86)                 NULL, err, 0, buf, buflen, NULL);
87) #else
88)   strerror_r(errno, buf, buflen);
89) #endif
90) }
91)