Browse Source

Add set buffer sizes code to Phy<>

Adam Ierymenko 10 years ago
parent
commit
40e0a34a5c
1 changed files with 30 additions and 0 deletions
  1. 30 0
      osdep/Phy.hpp

+ 30 - 0
osdep/Phy.hpp

@@ -655,6 +655,36 @@ public:
 		return (PhySocket *)&sws;
 		return (PhySocket *)&sws;
 	}
 	}
 
 
+	/**
+	 * Try to set buffer sizes as close to the given value as possible
+	 *
+	 * This will try the specified value and then lower values in 16K increments
+	 * until one works.
+	 *
+	 * @param sock Socket
+	 * @param bufferSize Desired buffer sizes
+	 */
+	inline void setBufferSizes(const PhySocket *sock,int bufferSize)
+	{
+		PhySocketImpl &sws = *(reinterpret_cast<PhySocketImpl *>(sock));
+		if (bufferSize > 0) {
+			int bs = bufferSize;
+			while (bs >= 65536) {
+				int tmpbs = bs;
+				if (::setsockopt(sws.sock,SOL_SOCKET,SO_RCVBUF,(const char *)&tmpbs,sizeof(tmpbs)) == 0)
+					break;
+				bs -= 16384;
+			}
+			bs = bufferSize;
+			while (bs >= 65536) {
+				int tmpbs = bs;
+				if (::setsockopt(sws.sock,SOL_SOCKET,SO_SNDBUF,(const char *)&tmpbs,sizeof(tmpbs)) == 0)
+					break;
+				bs -= 16384;
+			}
+		}
+	}
+
 	/**
 	/**
 	 * Attempt to send data to a stream socket (non-blocking)
 	 * Attempt to send data to a stream socket (non-blocking)
 	 *
 	 *