10 #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
33 sock_id = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
56 if(setsockopt(sock_id, SOL_SOCKET, SO_REUSEADDR, (
const char*)&on,
sizeof(on)) == -1)
63 if(setsockopt(sock_id, IPPROTO_TCP, TCP_NODELAY, (
const char*)&nagleOff,
sizeof(nagleOff)) == -1)
68 struct timeval timeout = {20, 0};
71 if(setsockopt(sock_id, SOL_SOCKET, SO_RCVTIMEO, &timeout,
sizeof(timeout)) == -1)
76 if(setsockopt(sock_id, SOL_SOCKET, SO_SNDTIMEO, &timeout,
sizeof(timeout)) == -1)
83 if(setsockopt(sock_id, SOL_SOCKET, SO_SNDTIMEO, &timeout,
sizeof(timeout)) == -1)
119 m_addr.sin_family = AF_INET;
120 m_addr.sin_addr.s_addr = inet_addr(host);
121 m_addr.sin_port = htons(port);
125 if (bind_return == -1)
140 if (!is_valid_master())
144 sock_id = m_sock_master;
148 if (!is_valid_slave())
152 sock_id = m_sock_slave;
157 if(listen_return == -1)
168 int addr_length =
sizeof(m_addr);
172 new_socket->m_sock_master = ::accept(m_sock_master, (sockaddr *)&m_addr, (socklen_t *)&addr_length);
173 if(new_socket->m_sock_master<= 0)
181 new_socket->m_sock_slave = ::accept(m_sock_slave, (sockaddr *)&m_addr, (socklen_t *)&addr_length);
182 if(new_socket->m_sock_master<= 0)
205 sock_id = m_sock_master;
209 sock_id = m_sock_slave;
211 int status = ::send(sock_id, s, data, MSG_NOSIGNAL);
231 unsigned char *buf = (
unsigned char*) malloc(data);
237 sock_id = m_sock_master;
241 sock_id = m_sock_slave;
244 int status = ::recv(sock_id, buf, data, 0);
256 for(
int i = 0; i < status; i++)
290 m_addr.sin_family = AF_INET;
291 m_addr.sin_port = htons(port);
293 int status = inet_pton(AF_INET, host.c_str(), &
m_addr.sin_addr);
295 if(errno == EAFNOSUPPORT)
326 opts = fcntl(sock_id, F_GETFL);
334 opts = (opts | O_NONBLOCK);
336 opts = (opts & ~O_NONBLOCK);
338 fcntl(sock_id, F_SETFL,opts);