A client that understands extended messages should set the 5th bit of the 6th byte of the reserved area in the handshake. For example: reserved[5] = 0x10 If the above bit is set in both peers' handshakes then they may exchange extended messages, which use id 20. The first byte of an extended message (after the 4-byte length and 1-byte id, of course) is the extended message id. The first extended message that should be sent is a handshake message, which always has an extended id of 0. The handshake message informs the peer which extended messages are supported and what their extended id will be. The message payload is a bencoded dictionary which may have some of the following keys: v string, client name and version. eg: Transmission 0.7 p int, tcp port for incoming peer connections m dict containing supported extended messages and the extended id used A peer may re-send the handshake message at any time to add new extended message, or to disable previous messages by sending 0 as their extended id. µTorrent peer exchange messages use the key ut_pex in the m dictionary. Peer exchanges messages should be sent approximately once every minute. The payload of a peer exchange message is a bencoded dictionary with the following keys: added string, contains peers in the compact tracker format (ie: 6 bytes for IPv4 address and port in network byte order) added since the last peer exchange message added.f string, one byte of flags for each peer in the above added string dropped same format as added, contains peers dropped since last peer exchange