Send inn-committers mailing list submissions to inn-committers@lists.isc.org
To subscribe or unsubscribe via the World Wide Web, visit https://lists.isc.org/mailman/listinfo/inn-committers or, via email, send a message with subject or body 'help' to inn-committers-requ...@lists.isc.org You can reach the person managing the list at inn-committers-ow...@lists.isc.org When replying, please edit your Subject line so it is more specific than "Re: Contents of inn-committers digest..." Today's Topics: 1. INN commit: branches/2.5/include/portable (socket.h) (INN Commit) ---------------------------------------------------------------------- Message: 1 Date: Wed, 6 Nov 2013 15:08:44 -0800 (PST) From: INN Commit <r...@isc.org> To: inn-committ...@isc.org Subject: INN commit: branches/2.5/include/portable (socket.h) Message-ID: <20131106230844.d574867...@hope.eyrie.org> Date: Wednesday, November 6, 2013 @ 15:08:44 Author: iulius Revision: 9562 socket.h: add socket_set_errno Fix a build error because of the introduction of socket_set_errno in commit [9557]. Backport commit [9345] to the 2.5 branch. Modified: branches/2.5/include/portable/socket.h ----------+ socket.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) Modified: socket.h =================================================================== --- socket.h 2013-11-06 03:50:35 UTC (rev 9561) +++ socket.h 2013-11-06 23:08:44 UTC (rev 9562) @@ -47,6 +47,54 @@ extern const char * inet_ntop(int, const void *, char *, socklen_t); #endif +/* + * Used for portability to Windows, which requires different functions be + * called to close sockets, send data to or read from sockets, and get socket + * errors than the regular functions and variables. Windows also uses SOCKET + * to store socket descriptors instead of an int. + * + * socket_init must be called before socket functions are used and + * socket_shutdown at the end of the program. socket_init may return failure, + * but this interface doesn't have a way to retrieve the exact error. + * + * socket_close, socket_read, and socket_write must be used instead of the + * standard functions. On Windows, closesocket must be called instead of + * close for sockets and recv and send must always be used instead of read and + * write. + * + * When reporting errors from socket functions, use socket_errno and + * socket_strerror instead of errno and strerror. When setting errno to + * something for socket errors (to preserve errors through close, for + * example), use socket_set_errno instead of just assigning to errno. + * + * Socket file descriptors must be passed and stored in variables of type + * socket_type rather than an int. Use INVALID_SOCKET for invalid socket file + * descriptors rather than -1, and compare to INVALID_SOCKET when testing + * whether operations succeed. + */ +#ifdef _WIN32 +int socket_init(void); +# define socket_shutdown() WSACleanup() +# define socket_close(fd) closesocket(fd) +# define socket_read(fd, b, s) recv((fd), (b), (s), 0) +# define socket_write(fd, b, s) send((fd), (b), (s), 0) +# define socket_errno WSAGetLastError() +# define socket_set_errno(e) WSASetLastError(e) +const char *socket_strerror(int); +typedef SOCKET socket_type; +#else +# define socket_init() 1 +# define socket_shutdown() /* empty */ +# define socket_close(fd) close(fd) +# define socket_read(fd, b, s) read((fd), (b), (s)) +# define socket_write(fd, b, s) write((fd), (b), (s)) +# define socket_errno errno +# define socket_set_errno(e) errno = (e) +# define socket_strerror(e) strerror(e) +# define INVALID_SOCKET -1 +typedef int socket_type; +#endif + /* Defined by RFC 3493, used to store a generic address. Note that this doesn't do the alignment mangling that RFC 3493 does; it's not clear if that should be added.... */ ------------------------------ _______________________________________________ inn-committers mailing list inn-committers@lists.isc.org https://lists.isc.org/mailman/listinfo/inn-committers End of inn-committers Digest, Vol 57, Issue 4 *********************************************