From 26fd89be8425acfbe0d0e6eb348ab1b5227444d0 Mon Sep 17 00:00:00 2001 From: Jonas Wielicki Date: Wed, 31 Jul 2013 14:25:23 +0200 Subject: [PATCH 1/2] Make the API more accessible by publishing constants --- src/buffer.h | 15 ++++++++------- src/common.h | 16 ++++++++++++++++ src/io.h | 7 ++++--- src/socket.h | 51 ++++++++++++++++++++++++++------------------------- src/timeout.h | 19 ++++++++++--------- src/usocket.c | 6 ------ src/usocket.h | 16 ++++++++++++++++ src/wsocket.c | 4 ---- src/wsocket.h | 5 +++++ 9 files changed, 85 insertions(+), 54 deletions(-) create mode 100644 src/common.h diff --git a/src/buffer.h b/src/buffer.h index a0901fcc..66acf090 100644 --- a/src/buffer.h +++ b/src/buffer.h @@ -18,6 +18,7 @@ #include "luasocket.h" #include "io.h" #include "timeout.h" +#include "common.h" /* buffer size in bytes */ #define BUF_SIZE 8192 @@ -37,13 +38,13 @@ typedef t_buffer *p_buffer; #pragma GCC visibility push(hidden) #endif -int buffer_open(lua_State *L); -void buffer_init(p_buffer buf, p_io io, p_timeout tm); -int buffer_meth_getstats(lua_State *L, p_buffer buf); -int buffer_meth_setstats(lua_State *L, p_buffer buf); -int buffer_meth_send(lua_State *L, p_buffer buf); -int buffer_meth_receive(lua_State *L, p_buffer buf); -int buffer_isempty(p_buffer buf); +LUASOCKET_API int buffer_open(lua_State *L); +LUASOCKET_API void buffer_init(p_buffer buf, p_io io, p_timeout tm); +LUASOCKET_API int buffer_meth_getstats(lua_State *L, p_buffer buf); +LUASOCKET_API int buffer_meth_setstats(lua_State *L, p_buffer buf); +LUASOCKET_API int buffer_meth_send(lua_State *L, p_buffer buf); +LUASOCKET_API int buffer_meth_receive(lua_State *L, p_buffer buf); +LUASOCKET_API int buffer_isempty(p_buffer buf); #ifndef _WIN32 #pragma GCC visibility pop diff --git a/src/common.h b/src/common.h new file mode 100644 index 00000000..9bb06660 --- /dev/null +++ b/src/common.h @@ -0,0 +1,16 @@ +#ifndef LUASOCKET_COMMON_H +#define LUASOCKET_COMMON_H + +#ifndef LUASOCKET_API +#define LUASOCKET_API extern +#endif + +#ifndef UNIX_API +#define UNIX_API extern +#endif + +#ifndef MIME_API +#define MIME_API extern +#endif + +#endif diff --git a/src/io.h b/src/io.h index b8a54df6..6e399fb3 100644 --- a/src/io.h +++ b/src/io.h @@ -14,13 +14,14 @@ \*=========================================================================*/ #include "luasocket.h" #include "timeout.h" +#include "common.h" /* IO error codes */ enum { IO_DONE = 0, /* operation completed successfully */ IO_TIMEOUT = -1, /* operation timed out */ IO_CLOSED = -2, /* the connection has been closed */ - IO_UNKNOWN = -3 + IO_UNKNOWN = -3 }; /* interface to error message function */ @@ -60,8 +61,8 @@ typedef t_io *p_io; #pragma GCC visibility push(hidden) #endif -void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx); -const char *io_strerror(int err); +LUASOCKET_API void io_init(p_io io, p_send send, p_recv recv, p_error error, void *ctx); +LUASOCKET_API const char *io_strerror(int err); #ifndef _WIN32 #pragma GCC visibility pop diff --git a/src/socket.h b/src/socket.h index e541f27d..e0b64324 100644 --- a/src/socket.h +++ b/src/socket.h @@ -10,6 +10,7 @@ * creates a interface compatible with the io.h module. \*=========================================================================*/ #include "io.h" +#include "common.h" /*=========================================================================*\ * Platform specific compatibilization @@ -40,31 +41,31 @@ typedef struct sockaddr SA; #pragma GCC visibility push(hidden) #endif -int socket_waitfd(p_socket ps, int sw, p_timeout tm); -int socket_open(void); -int socket_close(void); -void socket_destroy(p_socket ps); -int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, p_timeout tm); -int socket_create(p_socket ps, int domain, int type, int protocol); -int socket_bind(p_socket ps, SA *addr, socklen_t addr_len); -int socket_listen(p_socket ps, int backlog); -void socket_shutdown(p_socket ps, int how); -int socket_connect(p_socket ps, SA *addr, socklen_t addr_len, p_timeout tm); -int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *addr_len, p_timeout tm); -int socket_send(p_socket ps, const char *data, size_t count, size_t *sent, p_timeout tm); -int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent, SA *addr, socklen_t addr_len, p_timeout tm); -int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm); -int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got, SA *addr, socklen_t *addr_len, p_timeout tm); -int socket_write(p_socket ps, const char *data, size_t count, size_t *sent, p_timeout tm); -int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm); -void socket_setblocking(p_socket ps); -void socket_setnonblocking(p_socket ps); -int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp); -int socket_gethostbyname(const char *addr, struct hostent **hp); -const char *socket_hoststrerror(int err); -const char *socket_strerror(int err); -const char *socket_ioerror(p_socket ps, int err); -const char *socket_gaistrerror(int err); +LUASOCKET_API int socket_waitfd(p_socket ps, int sw, p_timeout tm); +LUASOCKET_API int socket_open(void); +LUASOCKET_API int socket_close(void); +LUASOCKET_API void socket_destroy(p_socket ps); +LUASOCKET_API int socket_select(t_socket n, fd_set *rfds, fd_set *wfds, fd_set *efds, p_timeout tm); +LUASOCKET_API int socket_create(p_socket ps, int domain, int type, int protocol); +LUASOCKET_API int socket_bind(p_socket ps, SA *addr, socklen_t addr_len); +LUASOCKET_API int socket_listen(p_socket ps, int backlog); +LUASOCKET_API void socket_shutdown(p_socket ps, int how); +LUASOCKET_API int socket_connect(p_socket ps, SA *addr, socklen_t addr_len, p_timeout tm); +LUASOCKET_API int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *addr_len, p_timeout tm); +LUASOCKET_API int socket_send(p_socket ps, const char *data, size_t count, size_t *sent, p_timeout tm); +LUASOCKET_API int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent, SA *addr, socklen_t addr_len, p_timeout tm); +LUASOCKET_API int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm); +LUASOCKET_API int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got, SA *addr, socklen_t *addr_len, p_timeout tm); +LUASOCKET_API int socket_write(p_socket ps, const char *data, size_t count, size_t *sent, p_timeout tm); +LUASOCKET_API int socket_read(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm); +LUASOCKET_API void socket_setblocking(p_socket ps); +LUASOCKET_API void socket_setnonblocking(p_socket ps); +LUASOCKET_API int socket_gethostbyaddr(const char *addr, socklen_t len, struct hostent **hp); +LUASOCKET_API int socket_gethostbyname(const char *addr, struct hostent **hp); +LUASOCKET_API const char *socket_hoststrerror(int err); +LUASOCKET_API const char *socket_strerror(int err); +LUASOCKET_API const char *socket_ioerror(p_socket ps, int err); +LUASOCKET_API const char *socket_gaistrerror(int err); #ifndef _WIN32 #pragma GCC visibility pop diff --git a/src/timeout.h b/src/timeout.h index 9e5250d3..b36bd588 100644 --- a/src/timeout.h +++ b/src/timeout.h @@ -5,6 +5,7 @@ * LuaSocket toolkit \*=========================================================================*/ #include "luasocket.h" +#include "common.h" /* timeout control structure */ typedef struct t_timeout_ { @@ -18,18 +19,18 @@ typedef t_timeout *p_timeout; #pragma GCC visibility push(hidden) #endif -void timeout_init(p_timeout tm, double block, double total); -double timeout_get(p_timeout tm); -double timeout_getstart(p_timeout tm); -double timeout_getretry(p_timeout tm); -p_timeout timeout_markstart(p_timeout tm); +LUASOCKET_API void timeout_init(p_timeout tm, double block, double total); +LUASOCKET_API double timeout_get(p_timeout tm); +LUASOCKET_API double timeout_getstart(p_timeout tm); +LUASOCKET_API double timeout_getretry(p_timeout tm); +LUASOCKET_API p_timeout timeout_markstart(p_timeout tm); -double timeout_gettime(void); +LUASOCKET_API double timeout_gettime(void); -int timeout_open(lua_State *L); +LUASOCKET_API int timeout_open(lua_State *L); -int timeout_meth_settimeout(lua_State *L, p_timeout tm); -int timeout_meth_gettimeout(lua_State *L, p_timeout tm); +LUASOCKET_API int timeout_meth_settimeout(lua_State *L, p_timeout tm); +LUASOCKET_API int timeout_meth_gettimeout(lua_State *L, p_timeout tm); #ifndef _WIN32 #pragma GCC visibility pop diff --git a/src/usocket.c b/src/usocket.c index acfe186c..7490df56 100644 --- a/src/usocket.c +++ b/src/usocket.c @@ -20,9 +20,6 @@ #ifndef SOCKET_SELECT #include -#define WAITFD_R POLLIN -#define WAITFD_W POLLOUT -#define WAITFD_C (POLLIN|POLLOUT) int socket_waitfd(p_socket ps, int sw, p_timeout tm) { int ret; struct pollfd pfd; @@ -41,9 +38,6 @@ int socket_waitfd(p_socket ps, int sw, p_timeout tm) { } #else -#define WAITFD_R 1 -#define WAITFD_W 2 -#define WAITFD_C (WAITFD_R|WAITFD_W) int socket_waitfd(p_socket ps, int sw, p_timeout tm) { int ret; diff --git a/src/usocket.h b/src/usocket.h index 45f2f99f..ca67c95c 100644 --- a/src/usocket.h +++ b/src/usocket.h @@ -56,4 +56,20 @@ typedef struct sockaddr_storage t_sockaddr_storage; #define SOCKET_INVALID (-1) +#ifndef SOCKET_SELECT +#include + +#define WAITFD_R POLLIN +#define WAITFD_W POLLOUT +#define WAITFD_C (POLLIN|POLLOUT) + +#else + +#define WAITFD_R 1 +#define WAITFD_W 2 +#define WAITFD_C (WAITFD_R|WAITFD_W) + +#endif + + #endif /* USOCKET_H */ diff --git a/src/wsocket.c b/src/wsocket.c index 7cd41159..0bb1833f 100755 --- a/src/wsocket.c +++ b/src/wsocket.c @@ -42,10 +42,6 @@ int socket_close(void) { /*-------------------------------------------------------------------------*\ * Wait for readable/writable/connected socket with timeout \*-------------------------------------------------------------------------*/ -#define WAITFD_R 1 -#define WAITFD_W 2 -#define WAITFD_E 4 -#define WAITFD_C (WAITFD_E|WAITFD_W) int socket_waitfd(p_socket ps, int sw, p_timeout tm) { int ret; diff --git a/src/wsocket.h b/src/wsocket.h index 39866402..55ab0a93 100644 --- a/src/wsocket.h +++ b/src/wsocket.h @@ -30,4 +30,9 @@ typedef t_socket *p_socket; #define AI_NUMERICSERV (0) #endif +#define WAITFD_R 1 +#define WAITFD_W 2 +#define WAITFD_E 4 +#define WAITFD_C (WAITFD_E|WAITFD_W) + #endif /* WSOCKET_H */ From 815d6d7f3dcb8b509444529addadd91a7eed179b Mon Sep 17 00:00:00 2001 From: "Azamat H. Hackimov" Date: Tue, 19 Oct 2021 01:13:28 +0300 Subject: [PATCH 2/2] Fix CFLAGS and LDFLAGS options Remove CFLAGS optimization overrides, add -Wl,-soname option to LDFLAGS for external linking. --- src/makefile | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/makefile b/src/makefile index 522d3781..cf4a5715 100755 --- a/src/makefile +++ b/src/makefile @@ -162,7 +162,7 @@ SO_macosx=so O_macosx=o CC_macosx=gcc DEF_macosx= -DLUASOCKET_$(DEBUG) -DUNIX_HAS_SUN_LEN -CFLAGS_macosx=$(LUAINC:%=-I%) $(DEF) -Wall -O2 -fno-common +CFLAGS_macosx=$(LUAINC:%=-I%) $(DEF) -Wall -fno-common LDFLAGS_macosx= -bundle -undefined dynamic_lookup -o LD_macosx=gcc SOCKET_macosx=usocket.o @@ -174,8 +174,7 @@ SO_linux=so O_linux=o CC_linux=gcc DEF_linux=-DLUASOCKET_$(DEBUG) -CFLAGS_linux=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ - -Wimplicit -O2 -ggdb3 -fpic +CFLAGS_linux=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra -Wimplicit -fpic LDFLAGS_linux=-O -shared -fpic -o LD_linux=gcc SOCKET_linux=usocket.o @@ -187,8 +186,7 @@ SO_freebsd=so O_freebsd=o CC_freebsd=gcc DEF_freebsd=-DLUASOCKET_$(DEBUG) -DUNIX_HAS_SUN_LEN -CFLAGS_freebsd=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ - -Wimplicit -O2 -ggdb3 -fpic +CFLAGS_freebsd=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra -Wimplicit -fpic LDFLAGS_freebsd=-O -shared -fpic -o LD_freebsd=gcc SOCKET_freebsd=usocket.o @@ -200,8 +198,7 @@ SO_solaris=so O_solaris=o CC_solaris=gcc DEF_solaris=-DLUASOCKET_$(DEBUG) -CFLAGS_solaris=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra \ - -Wimplicit -O2 -ggdb3 -fpic +CFLAGS_solaris=$(LUAINC:%=-I%) $(DEF) -Wall -Wshadow -Wextra -Wimplicit -fpic LDFLAGS_solaris=-lnsl -lsocket -lresolv -O -shared -fpic -o LD_solaris=gcc SOCKET_solaris=usocket.o @@ -214,7 +211,7 @@ O_mingw=o CC_mingw=gcc DEF_mingw= -DLUASOCKET_$(DEBUG) \ -DWINVER=0x0501 -CFLAGS_mingw=$(LUAINC:%=-I%) $(DEF) -Wall -O2 -fno-common +CFLAGS_mingw=$(LUAINC:%=-I%) $(DEF) -Wall -fno-common LDFLAGS_mingw= $(LUALIB) -shared -Wl,-s -lws2_32 -o LD_mingw=gcc SOCKET_mingw=wsocket.o @@ -396,18 +393,18 @@ none: all: $(SOCKET_SO) $(MIME_SO) $(SOCKET_SO): $(SOCKET_OBJS) - $(LD) $(SOCKET_OBJS) $(LDFLAGS)$@ + $(LD) $(SOCKET_OBJS) -Wl,-soname,socket/core.so $(LDFLAGS)$@ $(MIME_SO): $(MIME_OBJS) - $(LD) $(MIME_OBJS) $(LDFLAGS)$@ + $(LD) $(MIME_OBJS) -Wl,-soname,mime/core.so $(LDFLAGS)$@ all-unix: all $(UNIX_SO) $(SERIAL_SO) $(UNIX_SO): $(UNIX_OBJS) - $(LD) $(UNIX_OBJS) $(LDFLAGS)$@ + $(LD) $(UNIX_OBJS) -Wl,-soname,socket/unix.so $(LDFLAGS)$@ $(SERIAL_SO): $(SERIAL_OBJS) - $(LD) $(SERIAL_OBJS) $(LDFLAGS)$@ + $(LD) $(SERIAL_OBJS) -Wl,-soname,socket/serial.so $(LDFLAGS)$@ install: $(INSTALL_DIR) $(INSTALL_TOP_LDIR)