attempt to fix compilation on windows

This commit is contained in:
csoler 2021-12-19 16:52:43 +01:00
parent 40b965cab1
commit 6048a9a011
4 changed files with 27 additions and 6 deletions

View File

@ -37,15 +37,21 @@ RsFdBinInterface::RsFdBinInterface(int file_descriptor)
void RsFdBinInterface::setSocket(int s) void RsFdBinInterface::setSocket(int s)
{ {
if(mIsActive != 0) if(mIsActive != 0)
{ {
RsErr() << "Changing socket to active FsBioInterface! Canceling all pending R/W data." ; RsErr() << "Changing socket to active FsBioInterface! Canceling all pending R/W data." ;
close(); close();
} }
#ifndef WINDOWS_SYS
int flags = fcntl(s,F_GETFL); int flags = fcntl(s,F_GETFL);
if(!(flags & O_NONBLOCK)) if(!(flags & O_NONBLOCK))
throw std::runtime_error("Trying to use a blocking file descriptor in RsFdBinInterface. This is not going to work!"); throw std::runtime_error("Trying to use a blocking file descriptor in RsFdBinInterface. This is not going to work!");
#else
// On windows, there is no way to determine whether a socket is blobking or not, so we set it to non blocking whatsoever.
unsigned long int on = 1;
ret = ioctlsocket(fd[STDOUT_FILENO], FIONBIO, &on);
#endif
mCLintConnt = s; mCLintConnt = s;
mIsActive = (s!=0); mIsActive = (s!=0);

View File

@ -61,8 +61,13 @@ bool RsTcpSocket::connect()
} }
mState = CONNECTED; mState = CONNECTED;
#ifndef WINDOWS_SYS
int flags = fcntl(CreateSocket,F_GETFL); int flags = fcntl(CreateSocket,F_GETFL);
fcntl(CreateSocket, F_SETFL, flags | O_NONBLOCK); fcntl(CreateSocket, F_SETFL, flags | O_NONBLOCK);
#else
unsigned long int on = 1;
ret = ioctlsocket(fd, FIONBIO, &on);
#endif
setSocket(CreateSocket); setSocket(CreateSocket);

View File

@ -175,8 +175,13 @@ static bool test_listening_port(const std::string& /*address*/,uint16_t port)
close(sockfd); close(sockfd);
return false; return false;
} }
#ifndef WINDOWS_SYS
int flags = fcntl(sockfd, F_GETFL); int flags = fcntl(sockfd, F_GETFL);
fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
#else
unsigned long int on = 1;
ret = ioctlsocket(fd, FIONBIO, &on);
#endif
int res = listen(sockfd,5); int res = listen(sockfd,5);

View File

@ -272,9 +272,14 @@ void TorProcess::start()
} }
int flags ; int flags ;
#ifndef WINDOWS_SYS
flags = fcntl(fd[STDOUT_FILENO], F_GETFL); fcntl(fd[STDOUT_FILENO], F_SETFL, flags | O_NONBLOCK); flags = fcntl(fd[STDOUT_FILENO], F_GETFL); fcntl(fd[STDOUT_FILENO], F_SETFL, flags | O_NONBLOCK);
flags = fcntl(fd[STDERR_FILENO], F_GETFL); fcntl(fd[STDERR_FILENO], F_SETFL, flags | O_NONBLOCK); flags = fcntl(fd[STDERR_FILENO], F_GETFL); fcntl(fd[STDERR_FILENO], F_SETFL, flags | O_NONBLOCK);
#else
unsigned long int on = 1;
ret = ioctlsocket(fd[STDOUT_FILENO], FIONBIO, &on);
ret = ioctlsocket(fd[STDERR_FILENO], FIONBIO, &on);
#endif
mStdOutFD = new RsFdBinInterface(fd[STDOUT_FILENO]); mStdOutFD = new RsFdBinInterface(fd[STDOUT_FILENO]);
mStdErrFD = new RsFdBinInterface(fd[STDERR_FILENO]); mStdErrFD = new RsFdBinInterface(fd[STDERR_FILENO]);
} }