* DatagramSocket::InitCheck() returned the sem_id instead of a status_t, causing
pings to fail (raw socket initialization) after r31079. * Further cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31238 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2007, Haiku, Inc. All Rights Reserved.
|
||||
* Copyright 2007-2009, Haiku, Inc. All Rights Reserved.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
@@ -53,7 +53,8 @@ public:
|
||||
SocketAddress LocalAddress()
|
||||
{ return SocketAddress(fDomain->address_module, &fSocket->address); }
|
||||
ConstSocketAddress LocalAddress() const
|
||||
{ return ConstSocketAddress(fDomain->address_module, &fSocket->address); }
|
||||
{ return ConstSocketAddress(fDomain->address_module,
|
||||
&fSocket->address); }
|
||||
|
||||
SocketAddress PeerAddress()
|
||||
{ return SocketAddress(fDomain->address_module, &fSocket->peer); }
|
||||
@@ -70,8 +71,13 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
inline ProtocolSocket::ProtocolSocket(net_socket *socket)
|
||||
: fSocket(socket), fDomain(NULL) {}
|
||||
inline
|
||||
ProtocolSocket::ProtocolSocket(net_socket* socket)
|
||||
:
|
||||
fSocket(socket),
|
||||
fDomain(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
inline status_t
|
||||
@@ -147,7 +153,7 @@ DECL_DATAGRAM_SOCKET(inline)::DatagramSocket(const char *name,
|
||||
: ProtocolSocket(socket), fCurrentBytes(0)
|
||||
{
|
||||
status_t status = LockingBase::Init(&fLock, name);
|
||||
if (status < B_OK)
|
||||
if (status != B_OK)
|
||||
fNotify = status;
|
||||
else
|
||||
fNotify = create_sem(0, name);
|
||||
@@ -164,7 +170,7 @@ DECL_DATAGRAM_SOCKET(inline)::~DatagramSocket()
|
||||
|
||||
DECL_DATAGRAM_SOCKET(inline status_t)::InitCheck() const
|
||||
{
|
||||
return fNotify;
|
||||
return fNotify >= 0 ? B_OK : fNotify;
|
||||
}
|
||||
|
||||
|
||||
@@ -267,7 +273,8 @@ DECL_DATAGRAM_SOCKET(inline status_t)::BlockingDequeue(bool clone,
|
||||
DECL_DATAGRAM_SOCKET(inline status_t)::SocketDequeue(uint32 flags,
|
||||
net_buffer** _buffer)
|
||||
{
|
||||
return BlockingDequeue(flags & MSG_PEEK, _SocketTimeout(flags), _buffer);
|
||||
return BlockingDequeue((flags & MSG_PEEK) != 0, _SocketTimeout(flags),
|
||||
_buffer);
|
||||
}
|
||||
|
||||
|
||||
@@ -336,7 +343,7 @@ DECL_DATAGRAM_SOCKET(inline bigtime_t)::_SocketTimeout(uint32 flags) const
|
||||
{
|
||||
bigtime_t timeout = fSocket->receive.timeout;
|
||||
|
||||
if (flags & MSG_DONTWAIT)
|
||||
if ((flags & MSG_DONTWAIT) != 0)
|
||||
timeout = 0;
|
||||
else if (timeout != 0 && timeout != B_INFINITE_TIMEOUT)
|
||||
timeout += system_time();
|
||||
@@ -349,4 +356,4 @@ DECL_DATAGRAM_SOCKET(inline bigtime_t)::_SocketTimeout(uint32 flags) const
|
||||
return timeout;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif // PROTOCOL_UTILITIES_H
|
||||
|
||||
@@ -492,7 +492,7 @@ dump_ipv4_header(ipv4_header &header)
|
||||
|
||||
|
||||
static int
|
||||
dump_ipv4_multicast(int argc, char *argv[])
|
||||
dump_ipv4_multicast(int argc, char** argv)
|
||||
{
|
||||
MulticastState::Iterator it = sMulticastState->GetIterator();
|
||||
|
||||
@@ -761,9 +761,10 @@ IPv4Multicast::JoinGroup(IPv4GroupInterface *state)
|
||||
MutexLocker _(sMulticastGroupsLock);
|
||||
|
||||
sockaddr_in groupAddr;
|
||||
net_interface *intf = state->Interface();
|
||||
net_interface* interface = state->Interface();
|
||||
|
||||
status_t status = intf->first_info->join_multicast(intf->first_protocol,
|
||||
status_t status = interface->first_info->join_multicast(
|
||||
interface->first_protocol,
|
||||
fill_sockaddr_in(&groupAddr, state->Address()));
|
||||
if (status != B_OK)
|
||||
return status;
|
||||
@@ -781,9 +782,10 @@ IPv4Multicast::LeaveGroup(IPv4GroupInterface *state)
|
||||
sMulticastState->Remove(state);
|
||||
|
||||
sockaddr_in groupAddr;
|
||||
net_interface *intf = state->Interface();
|
||||
net_interface* interface = state->Interface();
|
||||
|
||||
return intf->first_protocol->module->join_multicast(intf->first_protocol,
|
||||
return interface->first_protocol->module->join_multicast(
|
||||
interface->first_protocol,
|
||||
fill_sockaddr_in(&groupAddr, state->Address()));
|
||||
}
|
||||
|
||||
@@ -945,16 +947,14 @@ ipv4_generic_delta_membership(ipv4_protocol *protocol, int option,
|
||||
const sockaddr_storage* _sourceAddr)
|
||||
{
|
||||
if (_groupAddr->ss_family != AF_INET)
|
||||
return EINVAL;
|
||||
return B_BAD_VALUE;
|
||||
|
||||
if (_sourceAddr && _sourceAddr->ss_family != AF_INET)
|
||||
return EINVAL;
|
||||
return B_BAD_VALUE;
|
||||
|
||||
const in_addr* groupAddr = &((const sockaddr_in*)_groupAddr)->sin_addr;
|
||||
|
||||
net_interface* interface;
|
||||
const in_addr *groupAddr, *sourceAddr = NULL;
|
||||
|
||||
groupAddr = &((const sockaddr_in *)_groupAddr)->sin_addr;
|
||||
|
||||
if (index == 0)
|
||||
interface = get_multicast_interface(protocol, groupAddr);
|
||||
else
|
||||
@@ -963,6 +963,7 @@ ipv4_generic_delta_membership(ipv4_protocol *protocol, int option,
|
||||
if (interface == NULL)
|
||||
return ENODEV;
|
||||
|
||||
const in_addr* sourceAddr = NULL;
|
||||
if (_sourceAddr)
|
||||
sourceAddr = &((const sockaddr_in*)_sourceAddr)->sin_addr;
|
||||
|
||||
@@ -1332,10 +1333,10 @@ ipv4_send_routed_data(net_protocol *_protocol, struct net_route *route,
|
||||
header->id = htons(atomic_add(&sPacketID, 1));
|
||||
header->fragment_offset = 0;
|
||||
if (protocol) {
|
||||
header->time_to_live = (buffer->flags & MSG_MCAST)
|
||||
header->time_to_live = (buffer->flags & MSG_MCAST) != 0
|
||||
? protocol->multicast_time_to_live : protocol->time_to_live;
|
||||
} else {
|
||||
header->time_to_live = (buffer->flags & MSG_MCAST)
|
||||
header->time_to_live = (buffer->flags & MSG_MCAST) != 0
|
||||
? kDefaultMulticastTTL : kDefaultTTL;
|
||||
}
|
||||
header->protocol = protocol
|
||||
@@ -1493,8 +1494,7 @@ ipv4_receive_data(net_buffer *buffer)
|
||||
return B_BAD_DATA;
|
||||
|
||||
struct sockaddr_in& source = *(struct sockaddr_in*)buffer->source;
|
||||
struct sockaddr_in &destination
|
||||
= *(struct sockaddr_in *)buffer->destination;
|
||||
struct sockaddr_in& destination = *(struct sockaddr_in*)buffer->destination;
|
||||
|
||||
fill_sockaddr_in(&source, header.source);
|
||||
fill_sockaddr_in(&destination, header.destination);
|
||||
|
||||
Reference in New Issue
Block a user