I've been thinking about this a bit during the last week, and I think the best option is to close the channel (and remove it from listeners) if the send were to block.  It would then be up to the caller of Listen() to pass a channel with an appropriately sized buffer or pay the consequences.  This way, we don't have to start guessing buffer sizes for all possible use cases, and not specifying a large enough buffer will only result in localized problems instead of the entire application grinding down to a halt.