один и тот же fd может быть использован в select для чтения и записи - PullRequest
1 голос
/ 12 ноября 2010

Я хочу использовать один и тот же сокет fd для операций чтения и записи. Допустим, в этом случае я работаю над "fd"

FD_SET(fd, &readfd);  
FD_SET(fd,&writefd);

select(fd+1, &readfd, &writefd, 0,200):

останется в силе или вернет мне ошибку.

Я думаю, поскольку writefd и readfd - это разные наборы, в обоих наборах может быть установлен один и тот же fd. Пожалуйста, исправьте меня, если я ошибаюсь.

Спасибо Arpit

Спасибо за быстрый ответ. Могу ли я сделать то же поведение в опросе POLLIN и POLLOUT для того же FD.

Ответы [ 4 ]

5 голосов
/ 12 ноября 2010

Это нормально, и это правильный способ контролировать один и тот же файл для чтения и записи. Последний аргумент, который нужно выбрать, это struct timeval, а не целое число.

1 голос
/ 24 января 2013

Значение тайм-аута должно быть структурой timeval.

struct timeval tv;
tv.tv_sec = 5;
tv.tv_usec = 0;
int iResult = select(fdmax+1, &read_fds, &write_fds, NULL, &tv) ;
0 голосов
/ 12 ноября 2010

Да, один и тот же fd может быть помещен в набор для записи и чтения.

Если вы получаете данные на fd, readfd сработает и вернется.данные на fd, writefd сработают, когда у вас будет достаточно места в буфере для отправки.

0 голосов
/ 12 ноября 2010

Это было давно, но если я правильно помню, это прекрасно.

...