mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 08:46:58 +08:00
added recv_timeout() to replace force_read_timeout() in socket reading
This commit is contained in:
42
src/common.c
42
src/common.c
@@ -93,7 +93,7 @@ const uint8_t * p = buf;
|
||||
p += ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -115,7 +115,7 @@ uint8_t * p = buf;
|
||||
p += ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ fd_set set;
|
||||
|
||||
tv.tv_sec = sec;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
|
||||
FD_ZERO(&set);
|
||||
FD_SET(sockfd, &set);
|
||||
|
||||
@@ -150,16 +150,40 @@ fd_set set;
|
||||
errno = ENOENT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
if (ret > 0) {
|
||||
left -= ret;
|
||||
p += ret;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
ssize_t recv_timeout(int sockfd, void *buf, size_t len, unsigned sec)
|
||||
{
|
||||
int ret;
|
||||
struct timeval tv;
|
||||
fd_set set;
|
||||
|
||||
tv.tv_sec = sec;
|
||||
tv.tv_usec = 0;
|
||||
|
||||
FD_ZERO(&set);
|
||||
FD_SET(sockfd, &set);
|
||||
|
||||
do {
|
||||
ret = select(sockfd + 1, &set, NULL, NULL, &tv);
|
||||
} while (ret == -1 && errno == EINTR);
|
||||
|
||||
if (ret == -1 || ret == 0) {
|
||||
errno = ETIMEDOUT;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return recv(sockfd, buf, len, 0);
|
||||
}
|
||||
|
||||
int ip_cmp(const struct sockaddr_storage *s1, const struct sockaddr_storage *s2, size_t n)
|
||||
{
|
||||
if (((struct sockaddr*)s1)->sa_family == AF_INET) {
|
||||
@@ -212,7 +236,7 @@ int send_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
int ret;
|
||||
|
||||
memset(&hdr, 0, sizeof(hdr));
|
||||
|
||||
|
||||
iov[0].iov_base = &cmd;
|
||||
iov[0].iov_len = 1;
|
||||
|
||||
@@ -247,7 +271,7 @@ int send_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
if (socketfd != -1) {
|
||||
hdr.msg_control = control_un.control;
|
||||
hdr.msg_controllen = sizeof(control_un.control);
|
||||
|
||||
|
||||
cmptr = CMSG_FIRSTHDR(&hdr);
|
||||
cmptr->cmsg_len = CMSG_LEN(sizeof(int));
|
||||
cmptr->cmsg_level = SOL_SOCKET;
|
||||
@@ -316,7 +340,7 @@ int recv_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
syslog(LOG_ERR, "%s:%u: recvmsg returned zero", __FILE__, __LINE__);
|
||||
return ERR_PEER_TERMINATED;
|
||||
}
|
||||
|
||||
|
||||
if (rcmd != cmd) {
|
||||
return ERR_BAD_COMMAND;
|
||||
}
|
||||
@@ -357,7 +381,7 @@ int recv_socket_msg(void *pool, int fd, uint8_t cmd,
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ret = 0;
|
||||
|
||||
cleanup:
|
||||
|
||||
@@ -31,9 +31,12 @@ void *_talloc_size2(void *ctx, size_t size);
|
||||
#define PROTOBUF_ALLOCATOR(name, pool) \
|
||||
ProtobufCAllocator name = {.alloc = _talloc_size2, .free = _talloc_free2, .allocator_data = pool}
|
||||
|
||||
#define DEFAULT_SOCKET_TIMEOUT 10
|
||||
|
||||
ssize_t force_write(int sockfd, const void *buf, size_t len);
|
||||
ssize_t force_read(int sockfd, void *buf, size_t len);
|
||||
ssize_t force_read_timeout(int sockfd, void *buf, size_t len, unsigned sec);
|
||||
ssize_t recv_timeout(int sockfd, void *buf, size_t len, unsigned sec);
|
||||
int ip_cmp(const struct sockaddr_storage *s1, const struct sockaddr_storage *s2, size_t n);
|
||||
char* ipv6_prefix_to_mask(void *pool, unsigned prefix);
|
||||
|
||||
|
||||
@@ -133,7 +133,7 @@ ssize_t cstp_recv(worker_st *ws, void *data, size_t data_size)
|
||||
counter--;
|
||||
} while (ret == GNUTLS_E_AGAIN && counter > 0);
|
||||
} else {
|
||||
ret = force_read_timeout(ws->conn_fd, data, data_size, 10);
|
||||
ret = recv_timeout(ws->conn_fd, data, data_size, DEFAULT_SOCKET_TIMEOUT);
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -146,7 +146,7 @@ ssize_t cstp_recv_nb(worker_st *ws, void *data, size_t data_size)
|
||||
if (ws->session != NULL) {
|
||||
ret = gnutls_record_recv(ws->session, data, data_size);
|
||||
} else {
|
||||
ret = force_read_timeout(ws->conn_fd, data, data_size, 10);
|
||||
ret = recv_timeout(ws->conn_fd, data, data_size, DEFAULT_SOCKET_TIMEOUT);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
@@ -35,7 +35,7 @@ typedef struct
|
||||
|
||||
#if 0
|
||||
#define tls_puts(s, str) tls_send(s, str, sizeof(str)-1)
|
||||
|
||||
|
||||
int __attribute__ ((format(printf, 2, 3)))
|
||||
tls_printf(gnutls_session_t session, const char *fmt, ...);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user