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;
|
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
|
/** 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
|
* reach the end of the file. Return the number of bytes read, or -1 on
|
||||||
* error. Only use if fd is a blocking fd. */
|
* 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;
|
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.
|
* Filesystem operations.
|
||||||
*/
|
*/
|
||||||
|
@ -118,9 +118,7 @@ int format_time_interval(char *out, size_t out_len, long interval);
|
|||||||
|
|
||||||
/* File helpers */
|
/* File helpers */
|
||||||
ssize_t write_all_to_fd(int fd, const char *buf, size_t count);
|
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_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) \
|
#define write_all(fd, buf, count, isSock) \
|
||||||
((isSock) ? write_all_to_socket((fd), (buf), (count)) \
|
((isSock) ? write_all_to_socket((fd), (buf), (count)) \
|
||||||
|
@ -5,6 +5,7 @@ ht.h
|
|||||||
lib/cc/*.h
|
lib/cc/*.h
|
||||||
lib/container/*.h
|
lib/container/*.h
|
||||||
lib/ctime/*.h
|
lib/ctime/*.h
|
||||||
|
lib/err/*.h
|
||||||
lib/lock/*.h
|
lib/lock/*.h
|
||||||
lib/log/*.h
|
lib/log/*.h
|
||||||
lib/net/*.h
|
lib/net/*.h
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "lib/net/socket.h"
|
#include "lib/net/socket.h"
|
||||||
#include "lib/net/address.h"
|
#include "lib/net/address.h"
|
||||||
#include "lib/cc/compat_compiler.h"
|
#include "lib/cc/compat_compiler.h"
|
||||||
|
#include "lib/err/torerr.h"
|
||||||
#include "lib/lock/compat_mutex.h"
|
#include "lib/lock/compat_mutex.h"
|
||||||
#include "lib/log/torlog.h"
|
#include "lib/log/torlog.h"
|
||||||
#include "lib/log/util_bug.h"
|
#include "lib/log/util_bug.h"
|
||||||
@ -647,3 +648,46 @@ set_socket_nonblocking(tor_socket_t sock)
|
|||||||
|
|
||||||
return 0;
|
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);
|
int get_max_sockets(void);
|
||||||
void set_max_sockets(int);
|
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
|
/* For stupid historical reasons, windows sockets have an independent
|
||||||
* set of errnos, and an independent way to get them. Also, you can't
|
* set of errnos, and an independent way to get them. Also, you can't
|
||||||
* always believe WSAEWOULDBLOCK. Use the macros below to compare
|
* always believe WSAEWOULDBLOCK. Use the macros below to compare
|
||||||
|
Loading…
Reference in New Issue
Block a user