diff --git a/a8/udplistener.cc b/a8/udplistener.cc index 9018886..52c3bfe 100644 --- a/a8/udplistener.cc +++ b/a8/udplistener.cc @@ -12,6 +12,7 @@ #include #include +#include #include namespace a8 @@ -19,7 +20,10 @@ namespace a8 long long UdpPacket::GetRemoteKey() { - return 0; + unsigned long addr = remote_addr.sin_addr.s_addr; + int port = remote_addr.sin_port; + long long key = a8::MakeInt64(addr, port); + return key; } struct UdpListenerImpl @@ -101,8 +105,8 @@ namespace a8 { if(!ActiveStart()) return; - struct sockaddr_in destAddr; - socklen_t addrLen = sizeof(sockaddr_in); + struct sockaddr_in from_addr; + socklen_t addr_len = sizeof(sockaddr_in); char recv_buf[1024 * 64]; int buflen = sizeof(recv_buf); while (!shutdown) { @@ -110,10 +114,15 @@ namespace a8 recv_buf, buflen, 0, - (struct sockaddr*)&destAddr, - (socklen_t*)&addrLen); + (struct sockaddr*)&from_addr, + (socklen_t*)&addr_len); if(ret > 0) { - master->on_recv_packet(nullptr); + a8::UdpPacket* pkt = new a8::UdpPacket(); + pkt->buf = (char*)malloc(ret + 1); + memmove((void*)pkt->buf, recv_buf, ret); + pkt->buf_len = ret; + pkt->remote_addr = from_addr; + master->on_recv_packet(pkt); } } } @@ -153,6 +162,12 @@ namespace a8 void UdpListener::SendUdpPacket(UdpPacket* pkt) { + //a8::XPrintf("SendUdpPacket buflen:%d\n", {pkt->buf_len}); + ::sendto(impl_->listen_socket, + pkt->buf, + pkt->buf_len, + 0, + (struct sockaddr*)&pkt->remote_addr, sizeof(pkt->remote_addr)); } diff --git a/a8/udplistener.h b/a8/udplistener.h index c257ec7..efc2516 100644 --- a/a8/udplistener.h +++ b/a8/udplistener.h @@ -9,7 +9,7 @@ namespace a8 { struct UdpPacket { - char* buf = nullptr; + const char* buf = nullptr; int buf_len = 0; sockaddr_in remote_addr;