reuse the UDP socket v_0
authorFrantišek Kučera <franta-hg@frantovo.cz>
Sun, 07 Aug 2022 10:45:05 +0200
branchv_0
changeset 2 2665ab0bcf44
parent 1 d93ea7346b66
child 3 2b57c8683ffe
reuse the UDP socket
src/Socket.h
--- 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);