我已经实现了与另一台服务器通信的客户端。两者都使用TCP / IP套接字交换消息。
我注意到每次服务器向我发送消息时都会收到以下错误消息"没有这样的文件或目录"在我的选择电话上。奇怪的是,正确的位已设置,我能够从服务器读取消息,但看到此错误很烦人。
我有retry_interval的原因是万一我失去了与服务器的连接。在那种情况下,我设置了retry_interval并且我继续重试再次形成会话。
来自客户端的相关代码,我看到此错误消息:
for (;;)
{
program_select_to_look_at_right_sockets(&readfds, &maxfds);
do
{
if (RETRY_TIMER_IS_SET(retry_interval))
{
activity = select( maxfds + 1 , &readfds , NULL , NULL , &retry_interval);
set_retry_timer (&retry_interval);
}
else
activity = select( maxfds + 1 , &readfds , NULL , NULL , NULL);
perror("main loop select error"); <-- Whenever i get a message from server this select throws an error
} while (activity < 0 && errno == EINTR);
if (RETRY_TIMER_IS_SET(retry_interval))
{
printf ("Connect RETRY timer to server expired!\n");
connect_to_server_again();
}
else if (FD_ISSET (server_connection_socket, &readfds))
{
/* Even if an error is thrown the code does reach this point which i find somewhat strange */
printf ("Server sent us a message!\n");
bytes_read = process_data_from_server();
if (bytes_read == 0)
{
clean_connection_from_server (&readfds);
set_retry_timer (&retry_interval);
}
}
答案 0 :(得分:0)
为什么你认为select
正在返回该错误?您需要检查select
的返回码以查看是否有错误。更多信息请点击此处:
http://man7.org/linux/man-pages/man2/select.2.html
如果你没有检查返回代码,那么你不知道是否有错误,并且perror打印的错误可能是之前函数调用中的一些随机内容。