[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Wesnoth-cvs-commits] wesnoth/src network_worker.cpp
From: |
Jon Daniel |
Subject: |
[Wesnoth-cvs-commits] wesnoth/src network_worker.cpp |
Date: |
Mon, 05 Sep 2005 16:28:28 -0400 |
CVSROOT: /cvsroot/wesnoth
Module name: wesnoth
Branch:
Changes by: Jon Daniel <address@hidden> 05/09/05 20:28:28
Modified files:
src : network_worker.cpp
Log message:
use poll/select in receive_buf isntead of CheckSockets
CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/wesnoth/wesnoth/src/network_worker.cpp.diff?tr1=1.48&tr2=1.49&r1=text&r2=text
Patches:
Index: wesnoth/src/network_worker.cpp
diff -u wesnoth/src/network_worker.cpp:1.48 wesnoth/src/network_worker.cpp:1.49
--- wesnoth/src/network_worker.cpp:1.48 Mon Sep 5 19:46:04 2005
+++ wesnoth/src/network_worker.cpp Mon Sep 5 20:28:28 2005
@@ -1,4 +1,4 @@
-/* $Id: network_worker.cpp,v 1.48 2005/09/05 19:46:04 j_daniel Exp $ */
+/* $Id: network_worker.cpp,v 1.49 2005/09/05 20:28:28 j_daniel Exp $ */
/*
Copyright (C) 2003-5 by David White <address@hidden>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
@@ -155,6 +155,8 @@
if(retval > 0)
continue;
}
+#else
+ }
#endif
return SOCKET_ERROR;
}
@@ -169,31 +171,16 @@
SOCKET_STATE receive_buf(TCPsocket sock, std::vector<char>& buf)
{
- SDLNet_SocketSet set = SDLNet_AllocSocketSet(1);
- if(!set) {
- ERR_NW << "SDLNet_AllocSocketSet: " << SDLNet_GetError() <<
"\n";
- SDLNet_FreeSocketSet(set);
- return SOCKET_ERROR;
- }
- if(SDLNet_TCP_AddSocket(set, sock) < 0) {
- ERR_NW << "SDLNet_TCP_AddSocket: " << SDLNet_GetError() << "\n";
- SDLNet_FreeSocketSet(set);
- return SOCKET_ERROR;
- }
char num_buf[4];
int len = SDLNet_TCP_Recv(sock,num_buf,4);
if(len != 4) {
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
return SOCKET_ERROR;
}
len = SDLNet_Read32(num_buf);
if(len < 1 || len > 100000000) {
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
return SOCKET_ERROR;
}
@@ -206,34 +193,55 @@
transfer_stats[sock].second.fresh_current(len);
}
- // wait for a maximum of 15 seconds for the socket to have activity
- if(SDLNet_CheckSockets(set, 15000) <= 0) {
- ERR_NW << "SDLNet_CheckSockets: " << strerror(errno) << "\n";
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
- return SOCKET_ERROR;
- }
while(beg != end) {
{
// if we are receiving the socket is in sockets_locked
// check if it is still locked
const threading::lock lock(*global_mutex);
if(sockets_locked[sock] != SOCKET_LOCKED) {
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
return SOCKET_ERROR;
}
}
const int res = SDLNet_TCP_Recv(sock, beg, end - beg);
if(res <= 0) {
- if(SDLNet_CheckSockets(set, 15000) <= 0) {
- ERR_NW << "SDLNet_CheckSockets: " <<
strerror(errno) << "\n";
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
- return SOCKET_ERROR;
+#ifdef EAGAIN
+ if(errno == EAGAIN) {
+#elif defined(EWOULDBLOCK)
+ if(errno == EWOULDBLOCK) {
+#else
+ {
+#endif
+#ifdef USE_POLL
+ struct pollfd fd = {
((_TCPsocket*)sock)->channel, POLLIN };
+ int poll_res;
+ do {
+ poll_res = poll(&fd, 1, 15000);
+ } while(poll_res == -1 && errno == EINTR);
+
+ if(poll_res > 0)
+ continue;
+ }
+#elif defined(USE_SELECT)
+ fd_set readfds;
+ FD_ZERO(&readfds);
+ FD_SET(((_TCPsocket*)sock)->channel, &readfds);
+ int retval;
+ struct timeval tv;
+ tv.tv_sec = 15;
+ tv.tv_usec = 0;
+
+ do {
+ retval =
select(((_TCPsocket*)sock)->channel + 1, &readfds, NULL, NULL, &tv);
+ } while(retval == -1 && errno == EINTR);
+
+ if(retval > 0)
+ continue;
+ }
+#else
}
- continue;
+#endif
+ return SOCKET_ERROR;
}
beg += res;
@@ -242,8 +250,6 @@
transfer_stats[sock].second.transfer(static_cast<size_t>(res));
}
}
- SDLNet_TCP_DelSocket(set, sock);
- SDLNet_FreeSocketSet(set);
return SOCKET_READY;
}
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, David White, 2005/09/03
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, David White, 2005/09/05
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/05
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/05
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp,
Jon Daniel <=
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/06
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/06
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/13
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/13
- [Wesnoth-cvs-commits] wesnoth/src network_worker.cpp, Jon Daniel, 2005/09/17