Fix errno references when handling socket errors.
When using socket functions, "sockerrno" is supposed to be used to retrieve the error code as opposed to "errno", so that it is translated to the correct call on Windows (WSAGetLastError() - Windows does not update errno on socket errors). Unfortunately, the use of sockerrno is inconsistent throughout the tinc codebase, as errno is often used incorrectly on socket-related calls. This commit fixes these oversights, which improves socket error handling on Windows.
This commit is contained in:
parent
058473dc8d
commit
0c026f3c6d
11 changed files with 35 additions and 34 deletions
|
@ -178,7 +178,7 @@ bool init_control(void) {
|
||||||
#ifndef HAVE_MINGW
|
#ifndef HAVE_MINGW
|
||||||
int unix_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
int unix_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if(unix_fd < 0) {
|
if(unix_fd < 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not create UNIX socket: %s", sockstrerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not create UNIX socket: %s", sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,12 +198,12 @@ bool init_control(void) {
|
||||||
umask(mask);
|
umask(mask);
|
||||||
|
|
||||||
if(result < 0) {
|
if(result < 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not bind UNIX socket to %s: %s", unixsocketname, sockstrerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not bind UNIX socket to %s: %s", unixsocketname, sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(listen(unix_fd, 3) < 0) {
|
if(listen(unix_fd, 3) < 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not listen on UNIX socket %s: %s", unixsocketname, sockstrerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not listen on UNIX socket %s: %s", unixsocketname, sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -225,7 +225,7 @@ bool event_loop(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(n < 0) {
|
if(n < 0) {
|
||||||
if(sockwouldblock(errno))
|
if(sockwouldblock(sockerrno))
|
||||||
continue;
|
continue;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -142,7 +142,7 @@ bool receive_meta(connection_t *c) {
|
||||||
inlen = recv(c->socket, inbuf, sizeof inbuf - c->inbuf.len, 0);
|
inlen = recv(c->socket, inbuf, sizeof inbuf - c->inbuf.len, 0);
|
||||||
|
|
||||||
if(inlen <= 0) {
|
if(inlen <= 0) {
|
||||||
if(!inlen || !errno) {
|
if(!inlen || !sockerrno) {
|
||||||
logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection closed by %s (%s)",
|
logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection closed by %s (%s)",
|
||||||
c->name, c->hostname);
|
c->name, c->hostname);
|
||||||
} else if(sockwouldblock(sockerrno))
|
} else if(sockwouldblock(sockerrno))
|
||||||
|
|
|
@ -164,7 +164,7 @@ static bool read_packet(vpn_packet_t *packet) {
|
||||||
|
|
||||||
if((lenin = recv(device_fd, (void *)packet->data, MTU, 0)) <= 0) {
|
if((lenin = recv(device_fd, (void *)packet->data, MTU, 0)) <= 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
|
logger(DEBUG_ALWAYS, LOG_ERR, "Error while reading from %s %s: %s", device_info,
|
||||||
device, strerror(errno));
|
device, sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +187,7 @@ static bool write_packet(vpn_packet_t *packet) {
|
||||||
|
|
||||||
if(sendto(device_fd, (void *)packet->data, packet->len, 0, ai->ai_addr, ai->ai_addrlen) < 0) {
|
if(sendto(device_fd, (void *)packet->data, packet->len, 0, ai->ai_addr, ai->ai_addrlen) < 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
|
logger(DEBUG_ALWAYS, LOG_ERR, "Can't write to %s %s: %s", device_info, device,
|
||||||
strerror(errno));
|
sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -465,7 +465,7 @@ int main_loop(void) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(!event_loop()) {
|
if(!event_loop()) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -744,7 +744,7 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt) {
|
||||||
priority = origpriority;
|
priority = origpriority;
|
||||||
logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting outgoing packet priority to %d", priority);
|
logger(DEBUG_TRAFFIC, LOG_DEBUG, "Setting outgoing packet priority to %d", priority);
|
||||||
if(setsockopt(listen_socket[n->sock].udp.fd, SOL_IP, IP_TOS, &priority, sizeof(priority))) /* SO_PRIORITY doesn't seem to work */
|
if(setsockopt(listen_socket[n->sock].udp.fd, SOL_IP, IP_TOS, &priority, sizeof(priority))) /* SO_PRIORITY doesn't seem to work */
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "System call `%s' failed: %s", "setsockopt", sockstrerror(sockerrno));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -417,7 +417,7 @@ char *get_name(void) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if(gethostname(hostname, sizeof hostname) || !*hostname) {
|
if(gethostname(hostname, sizeof hostname) || !*hostname) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not get hostname: %s\n", strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not get hostname: %s\n", sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
hostname[31] = 0;
|
hostname[31] = 0;
|
||||||
|
@ -980,7 +980,7 @@ static bool setup_myself(void) {
|
||||||
for(int i = 0; i < listen_sockets; i++) {
|
for(int i = 0; i < listen_sockets; i++) {
|
||||||
salen = sizeof sa;
|
salen = sizeof sa;
|
||||||
if(getsockname(i + 3, &sa.sa, &salen) < 0) {
|
if(getsockname(i + 3, &sa.sa, &salen) < 0) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not get address of listen fd %d: %s", i + 3, sockstrerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not get address of listen fd %d: %s", i + 3, sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ static bool bind_to_interface(int sd) {
|
||||||
status = setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr));
|
status = setsockopt(sd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr));
|
||||||
if(status) {
|
if(status) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Can't bind to interface %s: %s", iface,
|
logger(DEBUG_ALWAYS, LOG_ERR, "Can't bind to interface %s: %s", iface,
|
||||||
strerror(errno));
|
sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else /* if !defined(SOL_SOCKET) || !defined(SO_BINDTODEVICE) */
|
#else /* if !defined(SOL_SOCKET) || !defined(SO_BINDTODEVICE) */
|
||||||
|
@ -134,7 +134,7 @@ static bool bind_to_address(connection_t *c) {
|
||||||
sa.in6.sin6_port = 0;
|
sa.in6.sin6_port = 0;
|
||||||
|
|
||||||
if(bind(c->socket, &sa.sa, SALEN(sa.sa))) {
|
if(bind(c->socket, &sa.sa, SALEN(sa.sa))) {
|
||||||
logger(DEBUG_CONNECTIONS, LOG_WARNING, "Can't bind outgoing socket: %s", strerror(errno));
|
logger(DEBUG_CONNECTIONS, LOG_WARNING, "Can't bind outgoing socket: %s", sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,7 +179,7 @@ int setup_listen_socket(const sockaddr_t *sa) {
|
||||||
if(setsockopt(nfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof ifr)) {
|
if(setsockopt(nfd, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof ifr)) {
|
||||||
closesocket(nfd);
|
closesocket(nfd);
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Can't bind to interface %s: %s", iface,
|
logger(DEBUG_ALWAYS, LOG_ERR, "Can't bind to interface %s: %s", iface,
|
||||||
strerror(sockerrno));
|
sockstrerror(sockerrno));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
@ -247,10 +247,10 @@ int setup_vpn_in_socket(const sockaddr_t *sa) {
|
||||||
setsockopt(nfd, SOL_SOCKET, SO_BROADCAST, (void *)&option, sizeof option);
|
setsockopt(nfd, SOL_SOCKET, SO_BROADCAST, (void *)&option, sizeof option);
|
||||||
|
|
||||||
if(udp_rcvbuf && setsockopt(nfd, SOL_SOCKET, SO_RCVBUF, (void *)&udp_rcvbuf, sizeof(udp_rcvbuf)))
|
if(udp_rcvbuf && setsockopt(nfd, SOL_SOCKET, SO_RCVBUF, (void *)&udp_rcvbuf, sizeof(udp_rcvbuf)))
|
||||||
logger(DEBUG_ALWAYS, LOG_WARNING, "Can't set UDP SO_RCVBUF to %i: %s", udp_rcvbuf, strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_WARNING, "Can't set UDP SO_RCVBUF to %i: %s", udp_rcvbuf, sockstrerror(sockerrno));
|
||||||
|
|
||||||
if(udp_sndbuf && setsockopt(nfd, SOL_SOCKET, SO_SNDBUF, (void *)&udp_sndbuf, sizeof(udp_sndbuf)))
|
if(udp_sndbuf && setsockopt(nfd, SOL_SOCKET, SO_SNDBUF, (void *)&udp_sndbuf, sizeof(udp_sndbuf)))
|
||||||
logger(DEBUG_ALWAYS, LOG_WARNING, "Can't set UDP SO_SNDBUF to %i: %s", udp_sndbuf, strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_WARNING, "Can't set UDP SO_SNDBUF to %i: %s", udp_sndbuf, sockstrerror(sockerrno));
|
||||||
|
|
||||||
#if defined(IPPROTO_IPV6) && defined(IPV6_V6ONLY)
|
#if defined(IPPROTO_IPV6) && defined(IPV6_V6ONLY)
|
||||||
if(sa->sa.sa_family == AF_INET6)
|
if(sa->sa.sa_family == AF_INET6)
|
||||||
|
@ -330,7 +330,7 @@ static void do_outgoing_pipe(connection_t *c, char *command) {
|
||||||
int fd[2];
|
int fd[2];
|
||||||
|
|
||||||
if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
|
if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
|
||||||
logger(DEBUG_ALWAYS, LOG_ERR, "Could not create socketpair: %s", strerror(errno));
|
logger(DEBUG_ALWAYS, LOG_ERR, "Could not create socketpair: %s", sockstrerror(sockerrno));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -379,13 +379,13 @@ static void handle_meta_write(connection_t *c) {
|
||||||
|
|
||||||
ssize_t outlen = send(c->socket, c->outbuf.data + c->outbuf.offset, c->outbuf.len - c->outbuf.offset, 0);
|
ssize_t outlen = send(c->socket, c->outbuf.data + c->outbuf.offset, c->outbuf.len - c->outbuf.offset, 0);
|
||||||
if(outlen <= 0) {
|
if(outlen <= 0) {
|
||||||
if(!errno || errno == EPIPE) {
|
if(!sockerrno || sockerrno == EPIPE) {
|
||||||
logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection closed by %s (%s)", c->name, c->hostname);
|
logger(DEBUG_CONNECTIONS, LOG_NOTICE, "Connection closed by %s (%s)", c->name, c->hostname);
|
||||||
} else if(sockwouldblock(sockerrno)) {
|
} else if(sockwouldblock(sockerrno)) {
|
||||||
logger(DEBUG_CONNECTIONS, LOG_DEBUG, "Sending %d bytes to %s (%s) would block", c->outbuf.len - c->outbuf.offset, c->name, c->hostname);
|
logger(DEBUG_CONNECTIONS, LOG_DEBUG, "Sending %d bytes to %s (%s) would block", c->outbuf.len - c->outbuf.offset, c->name, c->hostname);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
logger(DEBUG_CONNECTIONS, LOG_ERR, "Could not send %d bytes of data to %s (%s): %s", c->outbuf.len - c->outbuf.offset, c->name, c->hostname, strerror(errno));
|
logger(DEBUG_CONNECTIONS, LOG_ERR, "Could not send %d bytes of data to %s (%s): %s", c->outbuf.len - c->outbuf.offset, c->name, c->hostname, sockstrerror(sockerrno));
|
||||||
}
|
}
|
||||||
|
|
||||||
terminate_connection(c, c->status.active);
|
terminate_connection(c, c->status.active);
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "system.h"
|
#include "system.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
|
||||||
|
@ -121,7 +122,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
int fd[2];
|
int fd[2];
|
||||||
if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
|
if(socketpair(AF_UNIX, SOCK_STREAM, 0, fd)) {
|
||||||
fprintf(stderr, "Could not create a UNIX socket pair: %s\n", strerror(errno));
|
fprintf(stderr, "Could not create a UNIX socket pair: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -174,7 +175,7 @@ int main(int argc, char *argv[]) {
|
||||||
close(fd[1]);
|
close(fd[1]);
|
||||||
|
|
||||||
if(socketpair(AF_UNIX, SOCK_DGRAM, 0, fd)) {
|
if(socketpair(AF_UNIX, SOCK_DGRAM, 0, fd)) {
|
||||||
fprintf(stderr, "Could not create a UNIX socket pair: %s\n", strerror(errno));
|
fprintf(stderr, "Could not create a UNIX socket pair: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,13 +210,13 @@ int main(int argc, char *argv[]) {
|
||||||
hint.ai_flags = initiator ? 0 : AI_PASSIVE;
|
hint.ai_flags = initiator ? 0 : AI_PASSIVE;
|
||||||
|
|
||||||
if(getaddrinfo(initiator ? argv[3] : NULL, initiator ? argv[4] : argv[3], &hint, &ai) || !ai) {
|
if(getaddrinfo(initiator ? argv[3] : NULL, initiator ? argv[4] : argv[3], &hint, &ai) || !ai) {
|
||||||
fprintf(stderr, "getaddrinfo() failed: %s\n", strerror(errno));
|
fprintf(stderr, "getaddrinfo() failed: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
int sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
||||||
if(sock < 0) {
|
if(sock < 0) {
|
||||||
fprintf(stderr, "Could not create socket: %s\n", strerror(errno));
|
fprintf(stderr, "Could not create socket: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,26 +225,26 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
if(initiator) {
|
if(initiator) {
|
||||||
if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
|
if(connect(sock, ai->ai_addr, ai->ai_addrlen)) {
|
||||||
fprintf(stderr, "Could not connect to peer: %s\n", strerror(errno));
|
fprintf(stderr, "Could not connect to peer: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "Connected\n");
|
fprintf(stderr, "Connected\n");
|
||||||
} else {
|
} else {
|
||||||
if(bind(sock, ai->ai_addr, ai->ai_addrlen)) {
|
if(bind(sock, ai->ai_addr, ai->ai_addrlen)) {
|
||||||
fprintf(stderr, "Could not bind socket: %s\n", strerror(errno));
|
fprintf(stderr, "Could not bind socket: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!datagram) {
|
if(!datagram) {
|
||||||
if(listen(sock, 1)) {
|
if(listen(sock, 1)) {
|
||||||
fprintf(stderr, "Could not listen on socket: %s\n", strerror(errno));
|
fprintf(stderr, "Could not listen on socket: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "Listening...\n");
|
fprintf(stderr, "Listening...\n");
|
||||||
|
|
||||||
sock = accept(sock, NULL, NULL);
|
sock = accept(sock, NULL, NULL);
|
||||||
if(sock < 0) {
|
if(sock < 0) {
|
||||||
fprintf(stderr, "Could not accept connection: %s\n", strerror(errno));
|
fprintf(stderr, "Could not accept connection: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -255,12 +255,12 @@ int main(int argc, char *argv[]) {
|
||||||
socklen_t addrlen = sizeof addr;
|
socklen_t addrlen = sizeof addr;
|
||||||
|
|
||||||
if(recvfrom(sock, buf, sizeof buf, MSG_PEEK, &addr, &addrlen) <= 0) {
|
if(recvfrom(sock, buf, sizeof buf, MSG_PEEK, &addr, &addrlen) <= 0) {
|
||||||
fprintf(stderr, "Could not read from socket: %s\n", strerror(errno));
|
fprintf(stderr, "Could not read from socket: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(connect(sock, &addr, addrlen)) {
|
if(connect(sock, &addr, addrlen)) {
|
||||||
fprintf(stderr, "Could not accept connection: %s\n", strerror(errno));
|
fprintf(stderr, "Could not accept connection: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -331,7 +331,7 @@ int main(int argc, char *argv[]) {
|
||||||
if(FD_ISSET(sock, &fds)) {
|
if(FD_ISSET(sock, &fds)) {
|
||||||
ssize_t len = recv(sock, buf, sizeof buf, 0);
|
ssize_t len = recv(sock, buf, sizeof buf, 0);
|
||||||
if(len < 0) {
|
if(len < 0) {
|
||||||
fprintf(stderr, "Could not read from socket: %s\n", strerror(errno));
|
fprintf(stderr, "Could not read from socket: %s\n", sockstrerror(sockerrno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(len == 0) {
|
if(len == 0) {
|
||||||
|
|
|
@ -485,7 +485,7 @@ bool recvline(int fd, char *line, size_t len) {
|
||||||
|
|
||||||
while(!(newline = memchr(buffer, '\n', blen))) {
|
while(!(newline = memchr(buffer, '\n', blen))) {
|
||||||
int result = recv(fd, buffer + blen, sizeof buffer - blen, 0);
|
int result = recv(fd, buffer + blen, sizeof buffer - blen, 0);
|
||||||
if(result == -1 && errno == EINTR)
|
if(result == -1 && sockerrno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
else if(result <= 0)
|
else if(result <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -511,7 +511,7 @@ bool recvdata(int fd, char *data, size_t len) {
|
||||||
|
|
||||||
while(blen < len) {
|
while(blen < len) {
|
||||||
int result = recv(fd, buffer + blen, sizeof buffer - blen, 0);
|
int result = recv(fd, buffer + blen, sizeof buffer - blen, 0);
|
||||||
if(result == -1 && errno == EINTR)
|
if(result == -1 && sockerrno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
else if(result <= 0)
|
else if(result <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -543,7 +543,7 @@ bool sendline(int fd, char *format, ...) {
|
||||||
|
|
||||||
while(blen) {
|
while(blen) {
|
||||||
int result = send(fd, p, blen, MSG_NOSIGNAL);
|
int result = send(fd, p, blen, MSG_NOSIGNAL);
|
||||||
if(result == -1 && errno == EINTR)
|
if(result == -1 && sockerrno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
else if(result <= 0)
|
else if(result <= 0)
|
||||||
return false;
|
return false;
|
||||||
|
@ -723,7 +723,7 @@ bool connect_tincd(bool verbose) {
|
||||||
|
|
||||||
if(getaddrinfo(host, port, &hints, &res) || !res) {
|
if(getaddrinfo(host, port, &hints, &res) || !res) {
|
||||||
if(verbose)
|
if(verbose)
|
||||||
fprintf(stderr, "Cannot resolve %s port %s: %s", host, port, strerror(errno));
|
fprintf(stderr, "Cannot resolve %s port %s: %s", host, port, sockstrerror(sockerrno));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue