![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: Hi there, We have developed an OpenVMS application that uses TCP/IP sockets. In-house we've tested it with UCX and VMS v6.2. We have now tested (at customers site) with v7.1 and MultiNet, with no problems. However, if we then go onto v7.1 with UCX we have a problem with the recv function. it returns a failed error code. The code segments are below. As you can see in our main we are initialising a socket which may of come from a service startup. iRc = SocketServerInit( HostName, &iPortNum, &hBindSocket, &hSocket, &lReason ); if (iRc != OK) appWriteErrorMsg(hErrorLog, "Error - MQFeeder:", "SocketServerInit FAILED" , &lReason); else { iRc = SocketRecv(hSocket, (char *)&sRecvBuf, sizeof(sRecvBuf), &iBufLen); } The code for SocketServerInit is as follows... long SocketServerInit(char *HostName, int * iPort, SOCKET * hSocket, SOCKET * hSocket2, long *lReason ) struct sockaddr_in ServerAddr; struct sockaddr_in ClientAddr; int iLimit = 5; unsigned int iRetLen; int iRc = OK; struct servent * stService; int iError; memset(&ServerAddr, 0, sizeof(ServerAddr)); *hSocket = socket(AF_INET,SOCK_STREAM,0); return FAIL; if (*iPort == 0) { *hSocket2 = socket(UCX$C_AUXS, 0, 0);; return OK; } else { if (*iPort <= 0 ) *iPort = DEFAULT_PORT_NUMBER; ServerAddr.sin_port = htons(*iPort) ; }; ServerAddr.sin_family = AF_INET ; ServerAddr.sin_addr.s_addr = INADDR_ANY ; iRc = bind(*hSocket,(struct sockaddr*)&ServerAddr,sizeof(ServerAddr)); iError = errno; if (iRc != OK) { perror("SocketServerInit: Bind"); return iRc; }; listen(*hSocket,iLimit); iRetLen = sizeof(ServerAddr); *hSocket2 =accept(*hSocket ,(struct sockaddr*)&ClientAddr, &iRetLen); return OK; Then the SocketRecv function is.... long SocketRecv (SOCKET hSocketId, char * sRecvBuf, int iBufLen, int *iBufRecvd) if ((*iBufRecvd=recv(hSocketId,sRecvBuf,iBufLen,0))<=0) return FAIL; return OK; The SocketServerInit is getting a socket, but as soon as a receive is done, the function fails. Is there some obvious patch? or pehaps a slight oversight that would make this fail? or maybe even some configuration within UCX that needs performing? Thanks The Answer is : The TCP/IP Services package version is separate from the OpenVMS version. TCP/IP Services V4.2 and V5.0 are the expected releases found on OpenVMS V7.1. To determine the version, use one of the following commands: $ tcpip show version $ ucx show version There are ECO kits available for V4.2 and prior releases, and an ECO for V5.0 (the current version) is expected. Please install the current ECO for the TCP/IP Services package, and try your test again. If the current ECO does not resolve the problem, please contact the Compaq Customer Support Center. If a formal report is required, a complete standalone example of the failure will make locating and resolving the problem much quicker.
|