File:  [parser3project] / parser3 / src / include / pa_socks.h
Revision 1.29: download - view: text, annotated - select for diffs - revision graph
Sun Oct 18 18:15:24 2026 UTC (7 days, 10 hours ago) by moko
Branches: MAIN
CVS tags: HEAD
hopefully final turing for EINTR handling

/**	@file
	Parser: socks initialization/finalization decls.

	Copyright (c) 2001-2026 Art. Lebedev Studio (https://www.artlebedev.com)
	Authors: Konstantin Morshnev <moko@design.ru>, Alexandr Petrosian <paf@design.ru>
*/

#ifndef PA_SOCKS_H
#define PA_SOCKS_H

#define IDENT_PA_SOCKS_H "$Id: pa_socks.h,v 1.29 2026/10/18 18:15:24 moko Exp $"

#ifdef _MSC_VER
#define socklen_t int
#else
#define closesocket close
#define INVALID_SOCKET -1
typedef int SOCKET;
#endif

void pa_socks_init();
void pa_socks_done();

int pa_socks_errno();
const char* pa_socks_strerr(int no);

/// true if the error means that the connection is reset or aborted
bool pa_socks_is_reset(int no);

/// true if the error means that the call is interrupted by a signal
bool pa_socks_is_interrupted(int no);

/// recv and send, restarted if interrupted by a signal: GC stops the threads with signals, the socket timeout (SO_RCVTIMEO, SO_SNDTIMEO) is not restarted
ssize_t pa_sock_recv(SOCKET sock, char *buf, size_t len);
ssize_t pa_sock_send(SOCKET sock, const char *buf, size_t len);

/// waits up to timeout_ms (negative is forever) for the socket to be ready for reading (or writing): >0 ready, 0 timeout, <0 error
int pa_sock_ready(SOCKET sock, bool for_write, int timeout_ms);

#endif

E-mail: