|
Hi All I've got an issue with a ILE RPG sockets program (V5R2M0) that I don't quite understand. The scenario is this: 1. I have a program on the 400 that wakes up and connects to a TCP connection on a PC. The PC is doing its comms through a Visual Basic program listening on an agreed port. The connection works just fine-- the 400 successfully connects to the port. 2. The 400 sends a request to the PC. The PC receives the request, and logs it to a text box control. 3. PC around and sends an acknowlegement to the 400 that it's received the data. The acknowledgement is an 8-bit binary zero value (x'00', or &H0 for you Visual Basic fans). The send works just fine. 4. I do the recv() on the AS/400 to receive the acknowledgement as follows: rc = recv( piSocket, %addr( piBuffer ): %len( piBuffer): 0 ); However, no data is received. By "no data received", rc is zero. This makes no sense to me. As I understand it, the socket I have created is a blocking socket. If this is the case, then why does my recv() read data from the line, and then return zero? I thought if you read a blocking socket, the program waited on the recv() until data was present, or a timeout ocurred, or an error ocurred. Have I created a non-blocking socket? I don't know. In a separate procedure, I created a socket using: // Create a socket socketID = socket( cAF_INET: cSOCK_STREAM: cIPPROTO_IP ); And I'm setting the socket options as follows: // Set socket address attributes sin_family = cAF_INET; sin_addr = IP; // IP address determined earlier in this proc sin_port = sPort; // Port number determined earlier in this proc sin_zero = *ALLx'00'; And I'm connecting as follows: // Connect to the host if connect( socketID: pMySockAddr: addrLen ) < 0; <do stuff if failure> endif; Does this create a blocking socket? As I say, steps 1, 2, 3 of the above scenario work just file. On the Visual Basic side, I've tried two TCP/IP OCX controls to do comms: the standard MS Winsock control (Visual Studio 6, Service Pack 2), and Catalyst's SocketWrench (SP 5). Both yield the same results. They both show that the single x'00' acknowldegement value IS sent to the 400 with no errors. I used Ethereal to trap the traffic between the PC and the AS/400, and the data goes to the PC correctly. More importantly, I can see the acknowldegement is in the traffic going to the 400. I used the 400 comms trace, and I can see that the 400 receives the acknowldegement data. I know I'm missing something stupid here. Anyone have any ideas? (I'm sorry if I haven't included enough code; I'm trying to avoid posting great hunks of my program.) Thanks -Doc
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.