42 #include <sys/types.h>
43 #include <sys/socket.h>
44 #include <netinet/in.h>
49 DataManager::RegisterSocketUser(UseSocket *pUS)
51 ASSERT(pUS->GetSock() != -1);
52 SocketUsers[pUS->GetSock()] = pUS;
56 DataManager::DeleteSocketUsers(
void)
58 for (std::map<int, UseSocket *>::iterator i = SocketUsers.begin();
59 i != SocketUsers.end(); ++i)
67 DataManager::WaitSocketUsers(
void)
69 if (SocketUsers.empty()) {
74 if (SocketUsersTimeout != 0) {
75 finalTime = time(NULL) + SocketUsersTimeout;
78 fd_set active_set, read_set;
82 std::map<int, UseSocket *>::iterator ri;
83 std::map<int, UseSocket *>::const_iterator re = SocketUsers.end();
85 for (n = 0, ri = SocketUsers.begin(); ri != re; ++n, ++ri) {
86 FD_SET(ri->first, &active_set);
91 struct timeval
timeout, *timeoutp = 0;
95 if (
timeout.tv_sec >= finalTime) {
97 silent_cerr(
"DataManager::WaitSocketUsers(): "
98 "timeout " << SocketUsersTimeout
99 <<
" s exceeded" << std::endl);
108 read_set = active_set;
109 int a = select(FD_SETSIZE, &read_set, 0, 0, timeoutp);
112 int save_errno = errno;
113 char *
msg = strerror(save_errno);
115 silent_cerr(
"select() failed: " << save_errno <<
" "
116 "(" << msg <<
")" << std::endl);
125 for (
int i = 0; i < FD_SETSIZE && a > 0; i++) {
126 if (FD_ISSET(i, &read_set)) {
127 UseSocket *pUS = SocketUsers[i];
130 sock = accept(i, pUS->GetSockaddr(),
133 int save_errno = errno;
134 char *
msg = strerror(save_errno);
136 silent_cerr(
"accept() failed: "
144 FD_CLR(i, &active_set);
146 SocketUsers.erase(i);
149 pUS->ConnectSock(sock);
#define MBDYN_EXCEPT_ARGS
#define ASSERT(expression)
static const doublereal a