Author: suokko
Date: Tue May 20 12:15:17 2008
New Revision: 26729
URL: http://svn.gna.org/viewcvs/wesnoth?rev=26729&view=rev
Log:
Made networking code check system buffer size and limit send length
Modified:
trunk/changelog
trunk/src/network_worker.cpp
Modified: trunk/changelog
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/changelog?rev=26729&r1=26728&r2=26729&view=diff
==============================================================================
--- trunk/changelog (original)
+++ trunk/changelog Tue May 20 12:15:17 2008
@@ -72,6 +72,7 @@
* fixed threading bug in upload_logs
* dissallow_observers is on as default if side has controller=null
* Fixed null-pointer reference in network code
+ * Made networking code check system buffer size and limit send length
* Added possibility to use per fight EV statistics proposed by maboul
* Added smoother FPS limit to server
* Fixed a mememory leak in networking code
Modified: trunk/src/network_worker.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/trunk/src/network_worker.cpp?rev=26729&r1=26728&r2=26729&view=diff
==============================================================================
--- trunk/src/network_worker.cpp (original)
+++ trunk/src/network_worker.cpp Tue May 20 12:15:17 2008
@@ -162,6 +162,7 @@
std::map<Uint32,threading::thread*> threads[NUM_SHARDS];
std::vector<Uint32> to_clear[NUM_SHARDS];
+int system_send_buffer_size = 0;
int receive_bytes(TCPsocket s, char* buf, size_t nbytes)
{
@@ -177,6 +178,18 @@
#else
return SDLNet_TCP_Recv(s, buf, nbytes);
#endif
+}
+
+
+void check_send_buffer_size(TCPsocket& s)
+{
+ if (system_send_buffer_size)
+ return;
+ _TCPsocket* sock = reinterpret_cast<_TCPsocket*>(s);
+ socklen_t len = sizeof(system_send_buffer_size);
+ getsockopt(sock->channel, SOL_SOCKET,
SO_RCVBUF,&system_send_buffer_size, &len);
+ --system_send_buffer_size;
+ std::cerr << "send buffer size: " << system_send_buffer_size << "\n";
}
bool receive_with_timeout(TCPsocket s, char* buf, size_t nbytes,
@@ -281,8 +294,10 @@
#ifdef __BEOS__
int timeout = 15000;
#endif
+ check_send_buffer_size(sock);
size_t upto = 0;
size_t size = buf.size();
+ int send_len = 0;
if (!raw_data_only)
{
@@ -301,7 +316,8 @@
if(sockets_locked[shard][sock] != SOCKET_LOCKED)
return SOCKET_ERRORED;
}
- const int res = SDLNet_TCP_Send(sock, &buf[upto],
static_cast<int>(size - upto));
+ send_len = minimum<int>(system_send_buffer_size,
static_cast<int>(size - upto));
+ const int res = SDLNet_TCP_Send(sock, &buf[upto],send_len);
if(!raw_data_only && res == static_cast<int>(size - upto)) {
{
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits