diff --git a/headers/private/net/net_socket.h b/headers/private/net/net_socket.h index d742749cc1..0f9bf11e01 100644 --- a/headers/private/net/net_socket.h +++ b/headers/private/net/net_socket.h @@ -32,7 +32,7 @@ typedef struct net_socket { int options; int linger; - int bound_to_device; + uint32 bound_to_device; struct { uint32 buffer_size; diff --git a/src/add-ons/kernel/network/stack/datalink.cpp b/src/add-ons/kernel/network/stack/datalink.cpp index cc8a58a389..2f0ed7c197 100644 --- a/src/add-ons/kernel/network/stack/datalink.cpp +++ b/src/add-ons/kernel/network/stack/datalink.cpp @@ -414,7 +414,7 @@ datalink_send_data(net_protocol* protocol, net_domain* domain, net_route* route = NULL; status_t status; if (protocol != NULL && protocol->socket != NULL - && protocol->socket->bound_to_device > 0) { + && protocol->socket->bound_to_device != 0) { status = get_device_route(domain, protocol->socket->bound_to_device, &route); } else diff --git a/src/add-ons/kernel/network/stack/net_socket.cpp b/src/add-ons/kernel/network/stack/net_socket.cpp index 32ea724ad1..608a5a6f96 100644 --- a/src/add-ons/kernel/network/stack/net_socket.cpp +++ b/src/add-ons/kernel/network/stack/net_socket.cpp @@ -363,7 +363,7 @@ dump_socket(int argc, char** argv) kprintf(" first module_info: %p\n", socket->first_info); kprintf(" options: %x\n", socket->options); kprintf(" linger: %d\n", socket->linger); - kprintf(" bound to device: %d\n", socket->bound_to_device); + kprintf(" bound to device: %" B_PRIu32 "\n", socket->bound_to_device); kprintf(" owner: %ld\n", socket->owner); kprintf(" max backlog: %ld\n", socket->max_backlog); kprintf(" is connected: %d\n", socket->is_connected); @@ -1490,6 +1490,8 @@ socket_set_option(net_socket* socket, int level, int option, const void* value, if (level != SOL_SOCKET) return ENOPROTOOPT; + TRACE("%s(socket %p, option %d\n", __FUNCTION__, socket, option); + switch (option) { // TODO: implement other options! case SO_LINGER: @@ -1586,16 +1588,12 @@ socket_set_option(net_socket* socket, int level, int option, const void* value, case SO_BINDTODEVICE: { - if (length != sizeof(int32)) - return B_BAD_VALUE; - - int index = *(const int32*)value; - if (index < 0) + if (length != sizeof(uint32)) return B_BAD_VALUE; // TODO: we might want to check if the device exists at all // (although it doesn't really harm when we don't) - socket->bound_to_device = index; + socket->bound_to_device = *(const uint32*)value; return B_OK; }