HP OpenVMS Systemsask the wizard |
The Question is:
This program was executed under OpenVms 6.2 UCX 4.0 and Cxx 5.0 Utilized these
macros:
#define fd_set int
#define FD_SET(x,y) (*y = *y | (1<<x))
#define FD_CLR(x,y) (*y = *y & ~(1<<x))
#define FD_ISSET(x,y) (*y & (1<<x))
#define FD_ZERO(y) (*y = 0)
...
fd_set aux_mascara;
fd_set cero;
FD_ZERO(&cero);
bcopy (&mascara,&aux_mascara, sizeof(mascara));
if(select(32,&aux_mascara,&cero,&cero, NULL)< 0){
perror ("main/Select");
continue;
AND now that has brought up to date to OpenVMS 7.2-1 compilador Cxx 6.2 TCPIP
V5.0A I have the following message:
main/Select: socket operation on non-socket
main/Select: socket operation on non-socket
That this passing? The macros already they come defined with the present one
compilador, they are incompatible?, as it I solve?
That modifications exist for the funcion select ()?
Thanks
The Answer is :
Apparently at least one of the file descriptors in the specified file
descriptor (fd) set is not associated with a socket. There was a change
made (in recent OpenVMS releases and recent OpenVMS CRTL ECO kits) to
how the select() function handles situations where the file descriptor
is not associated with a socket.
Attached below are the associated release notes. (Using the logical
name specified below, you can obtain the older behaviour.)
o The select() function has been corrected to return failure
status if either invalid file descriptor or file descriptor
not associated with a socket is found in one of the specified
file descriptor sets. In case of invalid file descriptor, the
select() function sets errno to EBADF. In case of a file
descriptor not associated with a socket, the function sets
errno to ENOTSOCK.
Failure with errno set to EBADF is the standard requirement
for the select() function. Failure with errno set to ENOTSOCK
is because currently the select() function can operate only on
sockets.
Prior to this fix, the function was setting errno as described
above, but otherwise was ignoring invalid file descriptors and
file descriptors not associated with sockets.
The old behavior can be requested by defining the logical name
DECC$SELECT_IGNORES_INVALID_FD prior to invoking the application
(any equivalence string).
|