我似乎有问题select
。
while(!sendqueue.empty())
{
if(!atms_connection.connected)
{
//print error message
goto RECONNECT;
}
//select new
FD_ZERO(&wfds);
FD_SET(atms_connection.socket, &wfds);
tv.tv_sec = 1;
tv.tv_usec = 0;
retval = select(atms_connection.socket + 1, NULL, &wfds, NULL, &tv);
if (retval == -1) {
printf("Select failed\n");
break;
}
else if (retval) {
printf("Sent a Message.\n");
}
else {
//printf("retval value is %d\n",retval);
printf("Server buffer is full, try again...\n");
break;
}
n = write(atms_connection.socket, sendqueue.front().c_str(), sendqueue.front().length());
}
该函数属于一个线程,当它获得锁时,它会使用 select() 清理队列并循环写入套接字,直到队列为空。
线程第一次获得锁时它select()
很好,但第二次获得锁并进入while它总是返回0。
作为记录,它曾经在一段时间前运行良好,从那时起我就没有更改过该代码。