FINS/UDP Method

Section 7-3

85/* RECEIVE FINS RESPONSE*/

86addrlen = sizeof(cs_addr);

87

88if ((recvlen = recvfrom(sockfd,fins_resp,MAX_MSG,0,&cs_addr,&addrlen)) < 0)

89{

90if (errno == EINTR)

91

goto CMND_SEND; /* RE-SEND FINS COMMAND*/

92err_exit("receive error");

93}

94else

95{

96

alarm(0); /* STOP RESPONSE MONITOR TIMER*/

97printf("recv length %d¥n",recvlen);

99

if (recvlen < 14) /* ILLEGAL RESPONSE LENGTH CHECK*/

100err_exit("FINS length error");

101if ((fins_cmnd[3] != fins_resp[6]) (fins_cmnd[4] != fins_resp[7])

102(fins_cmnd[5] != fins_resp[8]) )

103

{ /* DESTINATION ADDRESS CHECK*/

104err_exit("illegal source address error");

105}

106

if(fins_cmnd[9] != fins_resp[9]) /* SID CHECK*/

107err_exit("illegal SID error");

108}

109

110/* CLOSE SOCKET*/

111close(sockfd);

112

113}

116/*

117 * ERROR PROCESSING FUNCTIONS

118*/

119err_exit(err_msg)

120char *err_msg;

121{

122printf("client: %s %x¥n",err_msg,errno);

123exit(1);

124}

125

126/*

127* SIGNAL CAPTURE FUNCTIONS

128*/

129recv_fail()

130{

131printf("response timeout error ¥n");

132}

170

Page 194
Image 194
Omron CJ1W-ETN21 operation manual 170