int UdpSocket::receive(UdpPacket& packet) { socklen_t addrSize; addrSize = sizeof(*packet.getAddress().getAddress()); ssize_t ret = recvfrom(listenSocket, packet.getData(), packet.getSize(), 0, packet.getAddress().getAddress(), &addrSize); if (ret == SOCKET_ERROR) { packet.setSize(0); if (errno == EAGAIN) { return 0; } setInetError("Can't receive UDP packet"); return -1; } packet.setSize(ret); return 0; }
/** * Receive an UDP packet. * @param packet The packet that will receive data. The address will be set * to the source address. * @return 0 if ok, -1 if error */ int UdpSocket::receive(UdpPacket &packet) { TRACE_CLASS("UdpSocket", "receive(UdpPacket)"); socklen_t addrSize; addrSize = sizeof(*packet.getAddress().getAddress()); int ret = recvfrom(listenSocket, packet.getData(), packet.getSize() - packet.getOffset(), 0, packet.getAddress().getAddress(), &addrSize); if (ret == SOCKET_ERROR) { packet.setLength(0); #ifndef _WIN32 if (errno == EAGAIN) return 0; #endif setInetError("Can't receive UDP packet"); return -1; } packet.setLength(ret); if (ret == (long)packet.getSize()) { packet.setSize(packet.getSize() << 1); } return 0; }