--- a/src/Socket.h Tue Jul 26 23:22:24 2022 +0200
+++ b/src/Socket.h Sun Aug 07 10:45:05 2022 +0200
@@ -32,17 +32,12 @@
class Socket {
private:
const static size_t MSG_SIZE = 8192; // TODO: configurable/dynamic
+ int s = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
public:
- virtual ~Socket() {
- }
-
- std::string receive() {
- char buffer[MSG_SIZE + 1];
- memset(buffer, 0, MSG_SIZE + 1);
-
- int s = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
+ Socket() {
+ s = ::socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in a;
memset((char *) &a, 0, sizeof (a));
@@ -51,13 +46,30 @@
a.sin_port = htons(1234);
::bind(s, (sockaddr*) & a, sizeof (a));
+ // int soBufferSize = 1024 * 1024;
+ // setsockopt(s, SOL_SOCKET, SO_RCVBUF, &soBufferSize, sizeof (soBufferSize));
+ // soBufferSize = 0;
+ // socklen_t soBufferSizeLength = sizeof (soBufferSize);
+
+ // std::cerr << "soBufferSize=" << soBufferSize << std::endl;
+ // getsockopt(s, SOL_SOCKET, SO_RCVBUF, &soBufferSize, &soBufferSizeLength);
+ // std::cerr << "soBufferSize=" << soBufferSize << " length=" << soBufferSizeLength << std::endl;
+ }
+
+ virtual ~Socket() {
+ close(s);
+ }
+
+ std::string receive() {
+ char buffer[MSG_SIZE + 1];
+ memset(buffer, 0, MSG_SIZE + 1);
+
struct sockaddr_in remoteAddress;
memset((char *) &remoteAddress, 0, sizeof (remoteAddress));
- socklen_t remoteAddressSize = sizeof(remoteAddress);
+ socklen_t remoteAddressSize = sizeof (remoteAddress);
ssize_t msgSize = recvfrom(s, buffer, sizeof (buffer), 0, (sockaddr*) & remoteAddress, &remoteAddressSize);
- close(s);
if (msgSize > sizeof (buffer))throw std::logic_error("Invalid Socket message size.");
else if (msgSize >= 0) return std::string(buffer, msgSize);