1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-30 02:50:05 +00:00

Fix for IPV6 sockets.

This commit is contained in:
jules 2012-03-21 22:09:35 +00:00
parent 56bbab1537
commit baee94b197

View file

@ -196,7 +196,7 @@ namespace SocketHelpers
bool connectSocket (int volatile& handle,
const bool isDatagram,
void** serverAddress,
struct addrinfo** const serverAddress,
const String& hostName,
const int portNumber,
const int timeOutMillisecs) noexcept
@ -207,7 +207,8 @@ namespace SocketHelpers
hints.ai_flags = AI_NUMERICSERV;
struct addrinfo* info = nullptr;
if (getaddrinfo (hostName.toUTF8(), String (portNumber).toUTF8(), &hints, &info) != 0 || info == 0)
if (getaddrinfo (hostName.toUTF8(), String (portNumber).toUTF8(), &hints, &info) != 0
|| info == nullptr)
return false;
if (handle < 0)
@ -221,11 +222,10 @@ namespace SocketHelpers
if (isDatagram)
{
struct sockaddr* s = new struct sockaddr();
*s = *(info->ai_addr);
*serverAddress = s;
if (*serverAddress != nullptr)
freeaddrinfo (*serverAddress);
freeaddrinfo (info);
*serverAddress = info;
return true;
}
@ -341,7 +341,7 @@ bool StreamingSocket::connect (const String& remoteHostName,
portNumber = remotePortNumber;
isListener = false;
connected = SocketHelpers::connectSocket (handle, false, 0, remoteHostName,
connected = SocketHelpers::connectSocket (handle, false, nullptr, remoteHostName,
remotePortNumber, timeOutMillisecs);
if (! (connected && SocketHelpers::resetSocketOptions (handle, false, false)))
@ -428,9 +428,9 @@ StreamingSocket* StreamingSocket::waitForNextConnection() const
if (connected && isListener)
{
struct sockaddr address;
juce_socklen_t len = sizeof (sockaddr);
const int newSocket = (int) accept (handle, &address, &len);
struct sockaddr_storage address;
juce_socklen_t len = sizeof (address);
const int newSocket = (int) accept (handle, (struct sockaddr*) &address, &len);
if (newSocket >= 0 && connected)
return new StreamingSocket (inet_ntoa (((struct sockaddr_in*) &address)->sin_addr),
@ -453,7 +453,7 @@ DatagramSocket::DatagramSocket (const int localPortNumber, const bool allowBroad
handle (-1),
connected (true),
allowBroadcast (allowBroadcast_),
serverAddress (0)
serverAddress (nullptr)
{
SocketHelpers::initSockets();
@ -468,7 +468,7 @@ DatagramSocket::DatagramSocket (const String& hostName_, const int portNumber_,
handle (handle_),
connected (true),
allowBroadcast (false),
serverAddress (0)
serverAddress (nullptr)
{
SocketHelpers::initSockets();
@ -480,8 +480,8 @@ DatagramSocket::~DatagramSocket()
{
close();
delete static_cast <struct sockaddr*> (serverAddress);
serverAddress = 0;
if (serverAddress != nullptr)
freeaddrinfo (static_cast <struct addrinfo*> (serverAddress));
}
void DatagramSocket::close()
@ -514,7 +514,7 @@ bool DatagramSocket::connect (const String& remoteHostName,
hostName = remoteHostName;
portNumber = remotePortNumber;
connected = SocketHelpers::connectSocket (handle, true, &serverAddress,
connected = SocketHelpers::connectSocket (handle, true, (struct addrinfo**) &serverAddress,
remoteHostName, remotePortNumber,
timeOutMillisecs);
@ -529,19 +529,16 @@ bool DatagramSocket::connect (const String& remoteHostName,
DatagramSocket* DatagramSocket::waitForNextConnection() const
{
struct sockaddr address;
juce_socklen_t len = sizeof (sockaddr);
while (waitUntilReady (true, -1) == 1)
{
struct sockaddr_storage address;
juce_socklen_t len = sizeof (address);
char buf[1];
if (recvfrom (handle, buf, 0, 0, &address, &len) > 0)
{
if (recvfrom (handle, buf, 0, 0, (struct sockaddr*) &address, &len) > 0)
return new DatagramSocket (inet_ntoa (((struct sockaddr_in*) &address)->sin_addr),
ntohs (((struct sockaddr_in*) &address)->sin_port),
-1, -1);
}
}
return nullptr;
@ -564,12 +561,12 @@ int DatagramSocket::read (void* destBuffer, const int maxBytesToRead, const bool
int DatagramSocket::write (const void* sourceBuffer, const int numBytesToWrite)
{
// You need to call connect() first to set the server address..
jassert (serverAddress != 0 && connected);
jassert (serverAddress != nullptr && connected);
return connected ? (int) sendto (handle, (const char*) sourceBuffer,
numBytesToWrite, 0,
(const struct sockaddr*) serverAddress,
sizeof (struct sockaddr_in))
static_cast <const struct addrinfo*> (serverAddress)->ai_addr,
static_cast <const struct addrinfo*> (serverAddress)->ai_addrlen)
: -1;
}