решение 1 имеет дело непосредственно с socket
, а решение 2 сначала преобразует сокет в fd
, а затем преобразует в fileno
:
S 1:
maxfd = (sock_client > sock_server ) ? sock_client : sock_server;
FD_ZERO(&rfds);
FD_SET(sock_client, &rfds);
FD_SET(sock_server, &rfds);
if ((n = select(maxfd+1, &rfds, NULL, NULL, &timeout)) < 0)
...
S 2:
sockrfp = fdopen( sockfd, "r" );
sockwfp = fdopen( sockfd, "w" );
client_read_fd = fileno( stdin );
server_read_fd = fileno( sockrfp );
client_write_fd = fileno( stdout );
server_write_fd = fileno( sockwfp )
if ( client_read_fd >= server_read_fd )
maxfd = client_read_fd;
else
maxfd = server_read_fd;
FD_ZERO( &fdset );
FD_SET( client_read_fd, &fdset );
FD_SET( server_read_fd, &fdset );
if ((n = select(maxfd+1, &rfds, NULL, NULL, &timeout)) < 0)
...
Какая разница? Что лучше?