MCPcopy Create free account
hub / github.com/Tencent/UnLua / socket_recv

Function socket_recv

Plugins/UnLuaExtensions/LuaSocket/Source/src/wsocket.cpp:250–274  ·  view source on GitHub ↗

-------------------------------------------------------------------------*\ * Receive with timeout \*-------------------------------------------------------------------------*/

Source from the content-addressed store, hash-verified

248* Receive with timeout
249\*-------------------------------------------------------------------------*/
250int socket_recv(p_socket ps, char *data, size_t count, size_t *got,
251 p_timeout tm)
252{
253 int err, prev = IO_DONE;
254 *got = 0;
255 if (*ps == SOCKET_INVALID) return IO_CLOSED;
256 for ( ;; ) {
257 int taken = recv(*ps, data, (int) count, 0);
258 if (taken > 0) {
259 *got = taken;
260 return IO_DONE;
261 }
262 if (taken == 0) return IO_CLOSED;
263 err = WSAGetLastError();
264 /* On UDP, a connreset simply means the previous send failed.
265 * So we try again.
266 * On TCP, it means our socket is now useless, so the error passes.
267 * (We will loop again, exiting because the same error will happen) */
268 if (err != WSAEWOULDBLOCK) {
269 if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;
270 prev = err;
271 }
272 if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;
273 }
274}
275
276/*-------------------------------------------------------------------------*\
277* Recvfrom with timeout

Callers

nothing calls this directly

Calls 1

socket_waitfdFunction · 0.70

Tested by

no test coverage detected