У меня есть два узла, взаимодействующих с гнездом. Каждый узел имеет поток чтения и поток записи для связи с другим. Ниже приведен код для прочитанного потока. Связь прекрасно работает между двумя узлами с этим кодом. Но я пытаюсь добавить функцию выбора в этот поток, и это дает мне проблемы (код для выбора в комментариях. Я просто раскомментирую его, чтобы добавить функциональность). Проблема заключается в том, что один узел не получает сообщений и выполняет только тайм-аут. Другой узел получает сообщения от другого узла, но никогда не отключается. Эта проблема не существует (оба узла отправляют и получают сообщения) без выбора (сохраняя комментарии/* * /).программирование сокетов с помощью выбора
Может ли кто-нибудь указать, в чем проблема? Благодарю.
void *Read_Thread(void *arg_passed)
{
int numbytes;
unsigned char *buf;
buf = (unsigned char *)malloc(MAXDATASIZE);
/*
fd_set master;
int fdmax;
FD_ZERO(&master);
*/
struct RWThread_args_template *my_args = (struct RWThread_args_template *)arg_passed;
/*
FD_SET(my_args->new_fd, &master);
struct timeval tv;
tv.tv_sec = 2;
tv.tv_usec = 0;
int s_rv = 0;
fdmax = my_args->new_fd;
*/
while(1)
{
/*
s_rv = -1;
if((s_rv = select(fdmax+1, &master, NULL, NULL, &tv)) == -1)
{
perror("select");
exit(1);
}
if(s_rv == 0)
{
printf("Read: Timed out\n");
continue;
}
else
{
printf("Read: Received msg\n");
}
*/
if((numbytes = recv(my_args->new_fd, buf, MAXDATASIZE-1, 0)) == -1)
{
perror("recv");
exit(1);
}
buf[numbytes] = '\0';
printf("Read: received '%s'\n", buf);
}
pthread_exit(NULL);
}
Да. что решило проблему. благодаря! – Romonov