4 Commits

Author SHA1 Message Date
5c4fc93d5f Merge branch 'master' into hjelmeland-patch-1 2023-11-10 09:12:04 +03:00
43a97b7f00 ci: Update Luacheck to v1+, use newer Ubuntu runner images 2023-11-08 13:14:04 +03:00
64c9d531df ci: Identify CI jobs better and skip irrelevant platform specific steps 2023-11-08 13:08:10 +03:00
ccef3bc4e2 Changed return text for ETIMEDOUT/ WSAETIMEDOUT
Changed return text for ETIMEDOUT/ WSAETIMEDOUT to “connection timeout”.

This is needed for the application to be able tell to the difference between timeout of TCP connection (ETIMEDOUT/ WSAETIMEDOUT) and a normal return from a non-blocking socket (error codes EAGAIN/WSAEWOULDBLOCK). Both situations returned the text “timeout”.
2015-09-03 15:24:22 +02:00
4 changed files with 14 additions and 27 deletions

View File

@ -8,19 +8,19 @@ on:
jobs: jobs:
build: build:
name: Test build on ${{ matrix.platform }} name: Test ${{ matrix.luaVersion }} on ${{ matrix.platform }}
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ] luaVersion: [ "5.4", "5.3", "5.2", "5.1", "luajit", "luajit-openresty" ]
platform: [ "ubuntu-20.04", "macos-11", "windows-2022" ] platform: [ "ubuntu-22.04", "macos-11", "windows-2022" ]
runs-on: ${{ matrix.platform }} runs-on: ${{ matrix.platform }}
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Setup msvc - name: Setup msvc
if: ${{ startsWith(matrix.platform, 'windows') && !startsWith(matrix.luaVersion, 'luajit') }}
uses: ilammy/msvc-dev-cmd@v1 uses: ilammy/msvc-dev-cmd@v1
if: ${{ !startsWith(matrix.luaVersion, 'luajit') }}
- name: Setup lua - name: Setup lua
uses: leso-kn/gh-actions-lua@v11-staging uses: leso-kn/gh-actions-lua@v11-staging
with: with:

View File

@ -5,9 +5,9 @@ on: [push, pull_request]
jobs: jobs:
luacheck: luacheck:
runs-on: ubuntu-20.04 runs-on: ubuntu-22.04
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Luacheck - name: Luacheck
uses: lunarmodules/luacheck@v0 uses: lunarmodules/luacheck@v1

View File

@ -9,7 +9,7 @@
* Internal function prototypes * Internal function prototypes
\*=========================================================================*/ \*=========================================================================*/
static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b); static int recvraw(p_buffer buf, size_t wanted, luaL_Buffer *b);
static int recvline(p_buffer buf, luaL_Buffer *b, int chop); static int recvline(p_buffer buf, luaL_Buffer *b);
static int recvall(p_buffer buf, luaL_Buffer *b); static int recvall(p_buffer buf, luaL_Buffer *b);
static int buffer_get(p_buffer buf, const char **data, size_t *count); static int buffer_get(p_buffer buf, const char **data, size_t *count);
static void buffer_skip(p_buffer buf, size_t count); static void buffer_skip(p_buffer buf, size_t count);
@ -117,21 +117,10 @@ int buffer_meth_receive(lua_State *L, p_buffer buf) {
luaL_addlstring(&b, part, size); luaL_addlstring(&b, part, size);
/* receive new patterns */ /* receive new patterns */
if (!lua_isnumber(L, 2)) { if (!lua_isnumber(L, 2)) {
const char *p = luaL_optstring(L, 2, "l"); const char *p= luaL_optstring(L, 2, "*l");
if (*p == '*') p++; /* skip optional '*' (for compatibility) */ if (p[0] == '*' && p[1] == 'l') err = recvline(buf, &b);
switch (*p) { else if (p[0] == '*' && p[1] == 'a') err = recvall(buf, &b);
case 'l': /* line */ else luaL_argcheck(L, 0, 2, "invalid receive pattern");
err = recvline(buf, &b, 1);
break;
case 'L': /* line with \n */
err = recvline(buf, &b, 0);
break;
case 'a': /* all */
err = recvall(buf, &b);
break;
default:
luaL_argcheck(L, 0, 2, "invalid receive pattern");
}
/* get a fixed number of bytes (minus what was already partially /* get a fixed number of bytes (minus what was already partially
* received) */ * received) */
} else { } else {
@ -233,7 +222,7 @@ static int recvall(p_buffer buf, luaL_Buffer *b) {
* Reads a line terminated by a CR LF pair or just by a LF. The CR and LF * Reads a line terminated by a CR LF pair or just by a LF. The CR and LF
* are not returned by the function and are discarded from the buffer * are not returned by the function and are discarded from the buffer
\*-------------------------------------------------------------------------*/ \*-------------------------------------------------------------------------*/
static int recvline(p_buffer buf, luaL_Buffer *b, int chop) { static int recvline(p_buffer buf, luaL_Buffer *b) {
int err = IO_DONE; int err = IO_DONE;
while (err == IO_DONE) { while (err == IO_DONE) {
size_t count, pos; const char *data; size_t count, pos; const char *data;
@ -245,8 +234,6 @@ static int recvline(p_buffer buf, luaL_Buffer *b, int chop) {
pos++; pos++;
} }
if (pos < count) { /* found '\n' */ if (pos < count) { /* found '\n' */
if (!chop)
luaL_addchar(b, '\n');
buffer_skip(buf, pos+1); /* skip '\n' too */ buffer_skip(buf, pos+1); /* skip '\n' too */
break; /* we are done */ break; /* we are done */
} else /* reached the end of the buffer */ } else /* reached the end of the buffer */

View File

@ -12,7 +12,7 @@
#define PIE_CONNREFUSED "connection refused" #define PIE_CONNREFUSED "connection refused"
#define PIE_CONNABORTED "closed" #define PIE_CONNABORTED "closed"
#define PIE_CONNRESET "closed" #define PIE_CONNRESET "closed"
#define PIE_TIMEDOUT "timeout" #define PIE_TIMEDOUT "connection timeout"
#define PIE_AGAIN "temporary failure in name resolution" #define PIE_AGAIN "temporary failure in name resolution"
#define PIE_BADFLAGS "invalid value for ai_flags" #define PIE_BADFLAGS "invalid value for ai_flags"
#define PIE_BADHINTS "invalid value for hints" #define PIE_BADHINTS "invalid value for hints"