- while (size > 1024 &&
- (setsockopt (STDIN_FILENO, SOL_SOCKET, SO_RCVBUF,
- (char *) &size, sizeof size)
- < 0))
- size -= 1024;
-#else
- /* FIXME: I do not see any purpose to the following line... Sigh! */
- size = 1 + ((size - 1) % 1024);
+ if (0 <= fd)
+ {
+ int isize = size < INT_MAX ? size : INT_MAX;
+ while (setsockopt (fd, SOL_SOCKET, SO_RCVBUF,
+ (char *) &isize, sizeof isize)
+ && 1024 < isize)
+ isize >>= 1;
+ }