初めてboostで通信プログラム書くんだけれど、

void hpge()
{
boost::asio::ip::tcp::socket *sock;
boost::asio::io_service *service;

service = new io_service();
sock = new ip::tcp::socket(*service);

ip::tcp::acceptor acc(*service, ip::tcp::endpoint(ip::tcp::v4(), 2000));
acc.accept(*sock);

// 適当に送信
{
unsigned int a = 1234;
char b[4];
memcpy_s(b, 4, &a, 4);
sock->send(boost::asio::buffer(b));
}

delete sock; // (´・ω・`)はぁ?
}

なんでソケットがclose()やdeleteされないと送信が完了しないのか訳が分からない……
送受信のたびに毎回コネクトし直せとかそんな馬鹿げた仕様なわけあるまいし、どうやって使うもんなんですこれは?