mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Move read/write_all_to_socket into lib/net.
This commit is contained in:
parent
67135ca8e0
commit
356f59b1bd
@ -1094,24 +1094,6 @@ write_all_to_fd(int fd, const char *buf, size_t count)
|
||||
return (ssize_t)count;
|
||||
}
|
||||
|
||||
/** Write <b>count</b> bytes from <b>buf</b> to <b>sock</b>. Return the number
|
||||
* of bytes written, or -1 on error. Only use if fd is a blocking fd. */
|
||||
ssize_t
|
||||
write_all_to_socket(tor_socket_t fd, const char *buf, size_t count)
|
||||
{
|
||||
size_t written = 0;
|
||||
ssize_t result;
|
||||
raw_assert(count < SSIZE_MAX);
|
||||
|
||||
while (written != count) {
|
||||
result = tor_socket_send(fd, buf+written, count-written, 0);
|
||||
if (result<0)
|
||||
return -1;
|
||||
written += result;
|
||||
}
|
||||
return (ssize_t)count;
|
||||
}
|
||||
|
||||
/** Read from <b>fd</b> to <b>buf</b>, until we get <b>count</b> bytes or
|
||||
* reach the end of the file. Return the number of bytes read, or -1 on
|
||||
* error. Only use if fd is a blocking fd. */
|
||||
@ -1137,31 +1119,6 @@ read_all_from_fd(int fd, char *buf, size_t count)
|
||||
return (ssize_t)numread;
|
||||
}
|
||||
|
||||
/** Read from <b>sock</b> to <b>buf</b>, until we get <b>count</b> bytes or
|
||||
* reach the end of the file. Return the number of bytes read, or -1 on
|
||||
* error. Only use if fd is a blocking fd. */
|
||||
ssize_t
|
||||
read_all_from_socket(tor_socket_t sock, char *buf, size_t count)
|
||||
{
|
||||
size_t numread = 0;
|
||||
ssize_t result;
|
||||
|
||||
if (count > SIZE_T_CEILING || count > SSIZE_MAX) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (numread < count) {
|
||||
result = tor_socket_recv(sock, buf+numread, count-numread, 0);
|
||||
if (result<0)
|
||||
return -1;
|
||||
else if (result == 0)
|
||||
break;
|
||||
numread += result;
|
||||
}
|
||||
return (ssize_t)numread;
|
||||
}
|
||||
|
||||
/*
|
||||
* Filesystem operations.
|
||||
*/
|
||||
|
@ -118,9 +118,7 @@ int format_time_interval(char *out, size_t out_len, long interval);
|
||||
|
||||
/* File helpers */
|
||||
ssize_t write_all_to_fd(int fd, const char *buf, size_t count);
|
||||
ssize_t write_all_to_socket(tor_socket_t fd, const char *buf, size_t count);
|
||||
ssize_t read_all_from_fd(int fd, char *buf, size_t count);
|
||||
ssize_t read_all_from_socket(tor_socket_t fd, char *buf, size_t count);
|
||||
|
||||
#define write_all(fd, buf, count, isSock) \
|
||||
((isSock) ? write_all_to_socket((fd), (buf), (count)) \
|
||||
|
@ -5,6 +5,7 @@ ht.h
|
||||
lib/cc/*.h
|
||||
lib/container/*.h
|
||||
lib/ctime/*.h
|
||||
lib/err/*.h
|
||||
lib/lock/*.h
|
||||
lib/log/*.h
|
||||
lib/net/*.h
|
||||
|
@ -7,6 +7,7 @@
|
||||
#include "lib/net/socket.h"
|
||||
#include "lib/net/address.h"
|
||||
#include "lib/cc/compat_compiler.h"
|
||||
#include "lib/err/torerr.h"
|
||||
#include "lib/lock/compat_mutex.h"
|
||||
#include "lib/log/torlog.h"
|
||||
#include "lib/log/util_bug.h"
|
||||
@ -647,3 +648,46 @@ set_socket_nonblocking(tor_socket_t sock)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Read from <b>sock</b> to <b>buf</b>, until we get <b>count</b> bytes or
|
||||
* reach the end of the file. Return the number of bytes read, or -1 on
|
||||
* error. Only use if fd is a blocking fd. */
|
||||
ssize_t
|
||||
read_all_from_socket(tor_socket_t sock, char *buf, size_t count)
|
||||
{
|
||||
size_t numread = 0;
|
||||
ssize_t result;
|
||||
|
||||
if (count > SIZE_T_CEILING || count > SSIZE_MAX) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
while (numread < count) {
|
||||
result = tor_socket_recv(sock, buf+numread, count-numread, 0);
|
||||
if (result<0)
|
||||
return -1;
|
||||
else if (result == 0)
|
||||
break;
|
||||
numread += result;
|
||||
}
|
||||
return (ssize_t)numread;
|
||||
}
|
||||
|
||||
/** Write <b>count</b> bytes from <b>buf</b> to <b>sock</b>. Return the number
|
||||
* of bytes written, or -1 on error. Only use if fd is a blocking fd. */
|
||||
ssize_t
|
||||
write_all_to_socket(tor_socket_t fd, const char *buf, size_t count)
|
||||
{
|
||||
size_t written = 0;
|
||||
ssize_t result;
|
||||
raw_assert(count < SSIZE_MAX);
|
||||
|
||||
while (written != count) {
|
||||
result = tor_socket_send(fd, buf+written, count-written, 0);
|
||||
if (result<0)
|
||||
return -1;
|
||||
written += result;
|
||||
}
|
||||
return (ssize_t)count;
|
||||
}
|
||||
|
@ -52,6 +52,9 @@ int network_init(void);
|
||||
int get_max_sockets(void);
|
||||
void set_max_sockets(int);
|
||||
|
||||
ssize_t write_all_to_socket(tor_socket_t fd, const char *buf, size_t count);
|
||||
ssize_t read_all_from_socket(tor_socket_t fd, char *buf, size_t count);
|
||||
|
||||
/* For stupid historical reasons, windows sockets have an independent
|
||||
* set of errnos, and an independent way to get them. Also, you can't
|
||||
* always believe WSAEWOULDBLOCK. Use the macros below to compare
|
||||
|
Loading…
Reference in New Issue
Block a user