Index: src/OFUDPSocket.h ================================================================== --- src/OFUDPSocket.h +++ src/OFUDPSocket.h @@ -70,12 +70,19 @@ * @ref getHost:andPort:forAddress: to get the host / port pair for an address. * If you want to compare two addresses, you can use * @ref of_udp_socket_address_equal and you can use * @ref of_udp_socket_address_hash to get a hash to use in e.g. * @ref OFMapTable. + * + * @warning Even though the OFCopying protocol is implemented, it does *not* + * return an independent copy of the socket, but instead retains it. + * This is so that the socket can be used as a key for a dictionary, + * so context can be associated with a socket. Using a socket in more + * than one thread at the same time is not thread-safe, even if copy + * was called to create one "instance" for every thread! */ -@interface OFUDPSocket: OFObject { int _socket; } Index: src/OFUDPSocket.m ================================================================== --- src/OFUDPSocket.m +++ src/OFUDPSocket.m @@ -366,10 +366,15 @@ if (_socket != INVALID_SOCKET) [self close]; [super dealloc]; } + +- (id)copy +{ + return [self retain]; +} - (uint16_t)bindToHost: (OFString*)host port: (uint16_t)port { of_resolver_result_t **results;